第二章 相關研究工作
第四節 循序模式探勘
本論文在探索讀者借閱的順序性方面與[3][12]同屬循序模式探勘,所以在此 將這兩個演算法稍做整理介紹。
AprioriAll[3]屬於循序模式 (Sequential Pattern) 探勘之演算法,即同一使用 者在不同時間點有許多交易記錄,這些交易形成一個序列,每一序列為項目集所 形成的有序集(Order Set),AprioriAll 的目的是要在這些交易序列中找出包含次數 大於最小支持度的序列,在此所謂「包含」的定義為:如果存在 i1<i2< … < in及二 個序列<a1a2… an>及<b1b2… bn>,使得 a1⊆bi1,a2⊆bi2,…,an⊆bin,則序列<b1b2… bn>
包含<a1a2… an>。例如,序列<(7)(3 8)(9)(4 5 6)(8)>包含序列<(3)(4 5)(8)>,因為 (3)
⊆(3 8)、(4 5) ⊆(4 5 6)且(8) ⊆(8),然而<(3)(5)>並不包含<(3 5)>,反之,<(3 5)>
亦不包含<(3)(5)>。
以下舉例說明 AprioriAll 演算法。圖 2 - 4 - 1(a)為一以使用者編號為索引的 交易序列資料庫,每個序列裡的項目集為此使用者每次交易的物品,亦即該次的 交易記錄,例如使用者 2 曾交易三次,此三次交易分別為(10 20),(30),(40 50 70)。
現欲找出被大於 25%的交易序列包含之序列,作法如下:首先,用 Apriori 演算
接下來,再以 AprioriAll 演算法來探勘出所有的大序列。AprioriAll 和 Apriori 大部分都相同,唯一不同的是它將 Apriori 產生候選集時連結(Join)的步驟更改成 為有序性,如圖 2 - 4 - 3所示。圖 2 - 4 - 4為 L3 產生 C4 的過程。
Customer Id Customer Sequence Large Itemsets Mapped To 1
<(10 20)(30)(40 50 70)>
<(30 50 70)>
<(30)(40 70)(90)>
<(90)>
Orginal Customer Sequence
Transformed Customer Sequence
<(10 20)(30)(40 50 70)>
<(30 50 70)>
<(30)(40 70)(90)>
<(90)>
<{(30)}{(90)}>
<{(30)}{(40)(70)(40 70)}>
<{(30)(70)}>
<{(30)}{(40)(70)(40 70)}{(90)}>
<{(90)}>
select p.litemset1,…,p.litemsetk-1, q.litemsetk-1
from Lk-1 p,Lk-1 q
where p.itemset1=q.itemset1,…,p.itemsetk-2=q.itemsetk-2;
圖 2 - 4 - 3:AprioriAll 產生候集時連結的步驟
Large (after pruning)
<1 2 3>
因為 AprioriAll 沒有考慮到時間的限制及分類,所以在[12]中提出了一個新 的演算法,稱為 GSP (Generalized Sequential Patterns)。
GSP 加入了三個條件:
1. 時間限制 (Time Constraints):使用者通常會希望限制一個順序模式裡,
二個相鄰項目間有最大和(或)最小時間間隔。例如:以一個書商而言,
如果有一位客戶今天買了一本書,三年後才又買了另一本書,書商會覺 得這位讀者買這兩本書的時間間隔太久,這兩本書應該是沒什麼相關性 的,所以書商對這樣的順序模式不感興趣。
2. 滑動的時間視窗 (Sliding Time Window):在很多應用中,短時間內出現 在兩筆不同交易中的項目可能是有相關性的,所以可以將這兩個項目做 聯集加到順序模式裡視為同一筆交易。例如:有一位客戶今天訂了
“Foundation”,明天訂了“Ringworld”,隔了一週又訂了“Foundation and Empire”和“Ringworld Engineers”,則可以將“Foundation”和
“Ringworld”聯集起來,將〈(Foundation, Ringworld) (Foundation and Empire, Ringworld Engineers)〉加到順序模式裡。
3. 分類:很多資料庫都有對項目做分類,使用者如果想要得到不同層次間 的模式,則需加入分類。例如:給定一個分類圖如圖 2 - 4 - 5,若我們 想知道讀者借閱某一類別或某位作者的館藏後會借哪些書,則必須將類
別 及 作 者 也 加 入 交 易 資 料 裡 。 舉 例 來 說 : 如 果 有 一 位 讀 者 借 了
“ Foundation ” 及 “ Perfect Spy ” 二 本 館 藏 , 其 交 易 序 列 為
〈(Foundation)(Perfect Spy)〉,則我們必須將類別“Science Fiction”、
“Spy”及作者“Asimov”、“Le Carre”也加入序列中,使序列擴充 為〈(Foundation, Asimov, Science Fiction)(Perfect Spy, Le Carre, Spy)〉,
如此一來我們才能探勘出類別、作者及書目之間的關聯性。
圖 2 - 4 - 5:分類圖[12]
GSP 演算法如下:
首先,GSP 和 AprioriAll 一樣,在資料庫中找出所有長度為 1 的大項目集,
相當於長度為 1 的序列。接下來再依序產生候選集並計算候選集是否大於最小支 持度。
GSP 分為兩個步驟來產生候選集 Ck
1. 連結(Join):
用 Lk-1來連結 Lk-1。假設 Ck-1中有兩個序列 S1和 S2,如果 S1去掉 第一個項目和 S2 去掉最後一個項目後所得的序列相同,則將 S1 和 S2
連結起來成為 Ck的序列,此序列即為 S1加上 S2的最後一個項目。如:
〈(1,2) (3)〉和〈(2) (3,4)〉做連結後會產生〈(1,2) (3,4)〉。
Science Fiction
Asimov Niven
Foundation Foundation and Empire
Second Foundation
Ringworld Ringworld Engineers
Perfect Spy
Smiley’s People Le Carre
Spy
2. 刪除(Prune):
〈(2)(3,4)(5)〉、〈(1,2)(3)(5)(6)〉及〈(3)(5)〉等都是 s 的連續的子序列,但是
〈(1,2)(3,4)(6)〉和〈(1)(5)(6)〉則不是。 (after pruning)
<(1, 2)(3)>
GSP 在計算候選集是否大於最小支持度時,加入了時間限制和滑動的時間視
Transaction-Time Items
10
們所設定的時間視窗,因此找到出現時間在 20 之後的項目集(2,6)。
Items Times
1 → 10 → 50 → NULL 2 → 10 → 50 → 90 → NULL 3 → 45 → 65 → NULL 4 → 25 → 90 → NULL 5 → NULL
6 → 25 → 95 → NULL 7 → NULL
圖 2 - 4 - 8:各個項目的時間陣列