第二章 資料探勘相關研究工作
第二節 相關規則探勘
相關規則探勘是資料探勘的方法之一。相關規則探勘經常運用在商店的交易 記錄,針對使用者交易行為作關聯性分析,藉由交易商品的關聯性決定搭配促銷 商品、商品架位等行銷策略,以提高購買率,增加商店業績。例如:“20%買牙 刷的顧客也會同時買牙膏、毛巾和香皂”就是一個典型的相關規則。Agrawal 最 早提出從交易資料庫中發掘出相關規則的演算法[2],其後陸續有學者將相關規 則的概念應用到其他領域,提出適用該領域的演算法。本篇論文將相關規則探勘 應用在圖書館上,探討讀者借閱館藏及借閱類別的關聯性問題。
2.2.1 相關規則簡介
相關規則的正規敘述[1]如下:
令 I={i1,i2,… ,im} 為一個文字符號(Literal)組成的集合,每個文字符號稱為一 個項目(Item),由一個或一個以上的項目所組成的集合稱為項目集(Itemset)。令資 料庫 D 是由一群交易(Transaction) T 所組成的集合,每個 T 為一項目集,代表交 易記錄,T ⊆ I,每個交易記錄有其唯一的識別碼,稱為 TID。如果 X ⊆ I 且 X ⊆ T,則定義為 T 包含(Contain) X。以圖書館的應用來看,每一本書就是一個交易
項目,一個讀者在一段時間內來圖書館借閱館藏的集合即為一筆交易。
一個相關規則(Association Rule)表示成 X ⇒ Y,其中 X ⊆ I, Y ⊆ I, X ∩ Y
= ∅ 。若 D 中包含 X 的交易裡有 c%也同時包含了 Y,我們就說規則 X⇒Y 的確 信值(Confidence)為 c%;如果 D 裡包含 X∪Y 的交易記錄有 s%,我們就說規則 X⇒Y 的支持度(Support)為 s%。相關規則探勘定義為:給定交易記錄資料庫 D , 在當中找出所有確信值和支持度大於最小支持度跟最小確信值的規則,其中最小 支持度與最小確信值的門檻值由使用者設定。
Agrawal 等學者[2] 將相關規則探勘分為二個子問題:
子問題一:找到所有支持度大於最小支持度的項目集。
為了探勘方便起見,有時把某一項目集的支持度定義為包含此項目集的交易 個數,而不是原來的交易百分率。支持度大於最小支持度的項目集稱為頻繁項目 集(Frequent Itemset)或是大項目集(Large Itemset),反之稱為罕見項目集(Infrequent Itemset)或是小項目集(Small Itemset)。
子問題二:用子問題一中所找到的頻繁項目集來產生所期望的規則。
此步驟的演算法非常直覺,即:對於任一頻繁項目集 L,找出其所有非空子
集 合 。 對 於 每 個 非 空 子 集 合 a , 如 果 規 則 a⇒(L-a) 的 確 信 值 ( 也 就 是 support(L)/support(a))大於最小確信值,則此規則即符合所求。
由於子問題二 Agrawal 已經在[3]中提出有效率的演算法,所以學者們不再 進一步探討產生規則的方法,而是針對如何有效率地找出所有的頻繁項目集作研 究,文獻上將此問題稱為探勘頻繁項目集(Mining Frequent Itemsets)。
2.2.2 探勘頻繁項目集
探勘頻繁項目集的方法主要分為二派,一是根據 Agrawal 所提出的 Apriori [3]
演算法為研究基礎的候選項目集產生及測試法(Candidate Generation and Test Method);另一則是利用各種資料結構計算頻繁項目集的支持度,直接產生結果 的頻繁項目集成長法(Frequent Pattern Growth Method)。
以下簡介產生頻繁項目集的二大類方法:
n 候選項目集產生及測試法
這類方法是以 Agrawal 所提出的 Apriori [3]演算法為研究基礎。Apriori 演算 法以疊代(Iteration)的方式產生頻繁項目集。每一次疊代時產生所有相同長度的頻 繁項目集,在第一次時疊代產生長度為 1 的頻繁項目集,第二次時則產生長度為 2 的頻繁項目集,依此類推。每一次產生的頻繁項目集當作下一次疊代的種子集 (Seed Set),由種子集來推論下一次疊代所有可能會出現的頻繁項目集,文獻上 稱此可能出現的頻繁項目集為候選項目集(Candidate Itemset)。每一次疊代只要將 所有交易和產生之候選項目集加以比對並計算它們的支持度,候選項目集中所有 大於最小支持度的項目集所成之集合就是這一次疊代的頻繁項目集。如此一直反 覆,直到沒有新的頻繁項目集出現為止。圖 2 - 2 - 2 是一個簡單的例子,利用 Apriori 找出所有大於最小支持度 2 的項目集。圖 2 - 2 - 3 列出 Apriori 演算法。
圖 2 - 2 - 2:Apriori 例子[3]
圖 2 - 2 - 3:Apriori 演算法[3]
圖 2 - 2 - 3 中的 apriori_gen 函數用來產生候選項目集。由於任何頻繁項目集 的子集合也都是頻繁項目集,因此 apriori- gen 以所有頻繁 (k-1)-項目集(Lk-1)為參 數,傳回頻繁 k-項目集的候選集(Ck)。apriori-gen 分為兩個步驟來產生候選項目 集 Ck:
L1 = {large 1-itemsets};//產生長度為 1 的頻繁項目集 for (k=2;Lk-1≠∅;k++) do begin
Ck = apriori- gen(Lk-1);//產生 k-項目集之候選項目集 for all transactions t∈D do begin
Ct = subset(Ck,t); //交易記錄中所有包含 Ck的集合 for all candidates c∈Ct do
c.count++; //計算支持度 end
Lk = {c∈Ck|c.count ≥ minsup};//產生長度為 k 的頻繁項目集 end
Answer =∪k(Lk);
1. 連結(Join):用 Lk-1來連結 Lk-1
2. 刪除(Prune):對於所有的 c∈Ck,只要任何一個子集合不在 Lk-1中就刪除它
n 頻繁項目集成長法
頻繁項目集成長法的最大特色就是利用各種資料結構計算頻繁項目的支持 度,直接產生結果。如 FP-growth [10]及 Tree-projection [4]均是利用樹狀結構儲 存頻繁項目,並運用樹狀結構計算各頻繁項目的支持度,而 H-Mine [14]則是運 用 Pei 等學者所提出的 H-Struct,利用動態調整 H-Struct 的連結計算各頻繁項目 的支持度,以求出最後的頻繁項目集。
由於 Apriori 在項目重疊性高、交易項目長的項目集或是在支持度相當小的 情況下,效能並不夠好,因此,Han 等學者[4][10][14]分析可能造成效能不彰的 因素,並針對缺失提出新演算法。Han 等學者[10]分析 Apriori 效能不彰的原因為 二,一是在上述情況下,Apriori 必須處理龐大數目的候選項目集,所以拖垮整 體效能,另一則在產生在長項目集時,必須耗費大量時間來掃瞄資料庫並檢查比 對候選項目集。表 2 - 2 - 1 是二類頻繁項目集產生方法的比較。
for all itemsets c∈Ck do for all (k-1)-subsets s of c do
If (s∉Lk-1)then delete c from Ck; insert into Ck
select p.item1,p.item2,… ,p.itemk-1, q.itemk-1
from Lk-1 p, Lk-1 q
where p.item1=q.item1,… , p.itemk-2=q.itemk-2, p.itemk-1<q.itemk-1
方法 候選項目集產生及測試法 頻繁項目集成長法
FP-growth 的效能都比 Apriori 佳。圖書館交易記錄的資料量大且讀者借閱的館藏 重疊性不高,在設定高支持度時,不易找到頻繁項目集,因此,我們得設定較低 的支持度,但如此一來,頻繁項目成長法就較候選項目集產生及測試法適用於圖 書館的資料探勘。
現有的頻繁項目成長法主要有三種演算法,分別為 FP-growth [10]、Tree Projection [4] 及 H-Mine [14],由 Han [10]得知,FP- growth 的效能不管在支持度 或是資料量的擴充性上都略勝於 Tree Projection 一籌,但是,將 FP- growth 用在 交易項目分散、稀疏、重複性很低的資料集上時,表現又不如 H-Mine 出色。
頻繁項目集成長法 H-Mine FP-growth
優點 重 新 調 整 資 料 結 構
H-Struct 的連結即可,不會 一直重複產生小的投影資 料庫(Projected Database)。
在不同交易中若有共同前 (Projected Database)及附帶 的 頻 繁 項 目 樹 (FP- Tree:
Frequent Pattern Tree)。
最適合資料集 交易項目分散、稀疏、重
H-Mine[14]是由 Jian Pei 等學者所提出的頻繁項目集成長法,H-Mine 運用一 資料結構 H-Struct 儲存交易中的頻繁項目集,並透過 H-Struct 動態調整連結,進 行資料探勘。這個方法的最大特點就是在 H-Struct 中調整連結以達到如在投影資 料庫(Projected Database)中探勘的效果,這個方法的記憶體空間複雜度是可預期 的,而 Apriori、FP-growth 在記憶體的使用上則無法預期。
H-Mine 演算法針對資料量大小設計不同的演算法。當所有交易均可置入主
H-Mine 演算法的關鍵步驟就是建立資料結構 H-Struct。首先,掃瞄整個資料 筆交易的頻繁投影(Frequent Projection),而頻繁投影的集合則稱為投影資料庫 (Projected Database)。每一個存在 H-Struct 中的頻繁項目包含二個欄位:項目編 號及連結位置。H-Struct 的資料結構如圖 2 - 2 - 4。
個探勘過程全都在 H-Struct 上進行,不會再使用到原本的交易資料庫。
同樣地,探勘 ac 投影資料庫中的頻繁項目時,利用 ac 佇列的連結瀏覽 ac
結束所有以 a 為首頻繁項目集的搜尋後,回到標頭表格 H,追蹤 c 頻繁項目
合(Merge)結果,即 Jian Pei等學者所提出適合探勘大資料庫的 H-Mine[14]演算法。
H-Mine 演算法分為以下四個步驟。步驟一:先掃瞄過整個資料庫找出所有 單一項目的頻繁項目集。步驟二:將整個交易資料庫的頻繁投影分成幾個子資料 庫,讓每一個子資料庫所有交易的頻繁投影都可以置入主記憶體中。步驟三:將 每個子資料庫的頻繁投影利用 H-Mine(Mem) 演算法找出符合各自最小支持度的 頻繁項目集,各自最小支持度的算法為使用者設定整個資料庫的最小支持度乘以 該子資料庫占整個資料庫的比例。步驟四:將每個子資料庫中的頻繁項目集(為 區域頻繁項目集(Local Frequent Itemsets))及各項目集的支持度收集起來,掃瞄最 後一次資料庫,確定區域頻繁項目集滿足整體最小支持度,得到整體頻繁項目集 (Global Frequent Itemsets)。
H-Mine 與其他分割關聯演算法如 Partitioned Apriori [15]最大的不同在於 H-Mine 所需要的空間是可預測的,所需要的空間只有交易頻繁項目投影及標頭 表格,空間負擔比 Apriori 所耗費的空間小許多。且 H-Mine 一開始就直接考慮 整體頻繁項目,並不會耗費時間去運算那些不屬於整體頻繁項目但屬於區域頻繁 項目的項目集,相反地,Partitioned Apriori 在分配不均的子資料庫中,會耗費許 多時間計算及產生無用的候選項目集。