1. 程式人生 > >【資料探勘學習筆記】10.頻繁模式挖掘基礎

【資料探勘學習筆記】10.頻繁模式挖掘基礎

一、基本概念

頻繁模式

– 頻繁的出現在資料集中的模式

– 項集、子序或者子結構

動機

– 發現數據中蘊含的事物的內在規律

• 項(Item) 

– 最小的處理單位 – 例如:Bread, Milk

• 事務(Transaction) 

– 由事務號和項集組成 – 例如:<1, {Bread,Milk}> 

• 事務資料庫 

– 由多個事務組成

• 項集(Itemset)

– 一個或多個項(item) 的集
    • 例如:{Milk, Bread, Diaper}
– k-項集(k-itemset)

    • 包含k個項的集合

• 包含關係

– 令T為一事務,P為一項集,如果P是T的子集,稱T包含P ,記T⊇P或P⊆T
    • 例如{Milk, Bread, Diaper} ⊆T4


• 關聯規則(Association Rule)

– 項的集合:I={i1,i2,...,in}
– 任務相關資料D是資料庫事務的集合,每個事務T則是項的集合,使得T ⊆ I
– 每個事務由事務識別符號TID標識;
– A,B為兩個項集,事務T包含A當且僅當A ⊆ T
– 則關聯規則是如下蘊涵式:
    • A →B (s, c)
    • 其中,A和B 都是項集,s是規則的支援度,c是置信度


• 支援度計數(Support count)

– 事務資料庫中包含某個項集的事務的個數

– 例如:σ({Milk, Bread,Diaper}) = 2

• 支援度(Support)

– 事務資料庫中包含某個項集的事務佔事務總數的比例。

支援度s是指事務集D中包含A ∪ B的百分比

support(A ⇒ B) = P(A ∪ B)

置信度c是指D中包含A的事務同時也包含B的百分比

confidence (A ⇒ B) = P(B | A) = P(A ∪ B)/ P(A)

• 關聯規則挖掘目的

– 給定一個事務資料庫TD,關聯規則挖掘的目標是要找到所有支援度和置信度都不小於指定閾值的規則。
    • 支援度≥minsup
    • 置信度≥minconf

• 關聯規則步驟:

– 1、找個這個“同一項集”,相同的項集對應的規則有相同的支援度,找到支援度≥minsup的項集
– 2、計算項集中所有規則的置信度,找到置信度≥minconf的規則

• 頻繁項集(Frequent Itemset)

– 令P為任何一個項集,如果P的支援度不小於指定的最小閾值(minsupthreshold),稱P為頻繁項集

關聯規則挖掘分類

– 根據挖掘的模式的完全性分類:給定min_sup,可以挖掘頻繁項集的完全集,閉頻繁項集和極大頻繁項集。也可以挖掘被約束的頻繁項集(即滿足使用者指定的一組約束的頻繁項集)、近似的頻繁項集(只推導被挖掘的頻繁項集的近似支援度計數)、接近匹配的頻繁項集(即與接近或幾乎匹配的項集的支援度計數符合的項集)、top-k頻繁項集
– 不同的應用對挖掘的模式的完全性有不同的要求,我們主要研究挖掘頻繁項集的完全集、閉頻繁項集和被約束的頻繁項集

二、Apriori

生成頻繁項集


窮舉法(Brute-force approach) 
– 每個項集都是候選的頻繁項集
– 通過掃描一次事務資料庫,可以得到每個候選項集的支援度
    • 比較每一條事務和每個候選項集

– 計算複雜度-O(NMw
    • N為事務數目,M = 2d為候選項集,d為項數,w為一次比較的計算

• 計算複雜度-O(NMw)
    – 太高,需要改進
• 改進策略
    – 縮小候選項集的數量(M)
        • 完全搜尋:M=2d
        • 通過裁減技術減少M
    – 縮小比較次數(NM)
        • 用不同的資料結構來儲存後續項集和事務
        • 避免比較每一對候選項集和事務
    – 縮小比較代價(w)

• 縮小候選集
– Apriori性質:
    • 如果一個項集是頻繁的,那麼它的所有子集都是頻繁的。
    • 也稱為反單調性
– Apriori性質成立的原因如下
    • 任何一個項集的支援度不可能超過其子集的支援度


縮小候選集思路


Apriori演算法

– Apriori演算法是挖掘布林關聯規則頻繁項集的演算法
– Apriori演算法利用頻繁項集性質的先驗知識(prior knowledge),通過逐層搜尋的迭代方法,即將k-項集用於探察(k+1)-項集,來窮盡資料集中的所有頻繁項集。
– 先找到頻繁1-項集集合L1,然後用L1找到頻繁2-項集集合L2,接著用L2找L3,直到找不到頻繁k-項集,找每個Lk需要一次資料庫掃描。


計算候選集支援度

方法:
– 用hash樹來儲存候選項集
– hash樹的葉子結點包含候選項集及其計數
– 非葉結點包含hash table
– hash函式:找出包含在一個事務中的所有候選項集

構造Hash樹
– 假定有15個長度為3的候選項集:{1 4 5}, {1 2 4}, {4 5 7}, {1 2 5}, {4 5 8}, {1 5 9}, {1 3 6}, {2 3 4}, {5 6 7}, {3 4 5}, {3 5 6}, {3 5 7}, {6 8 9}, {3 6 7}, {3 6 8}
– 設定:
    • Hash函式
    • 最大葉結點尺寸:在一個葉結點中儲存的最大候選項集的數目(如果大於該閾值則分裂該結點)

候選集
– {1 4 5}, {1 2 4}, {4 5 7}, {1 2 5}, {4 5 8}, {1 5 9}, {1 3 6}, {2 3 4}, {5 6 7}, {3 4 5}, {3 5 6}, {3 5 7}, {6 8 9}, {3 6 7}, {3 6 8}
– 雜湊樹




子集操作


查詢雜湊樹




Apriori演算法主要的挑戰 

– 要對資料進行多次掃描; 

– 會產生大量的候選項集; 

– 對候選項集的支援度計算非常繁瑣; 

解決思路 

– 減少對資料的掃描次數; 

– 縮小產生的候選項集; 

– 改進對候選項集的支援度計算方法

• 方法1:基於hash表的項集計數

– 將每個項集通過相應的hash函式對映到hash表中的不同的桶中,這樣可以通過將桶中的項集技術跟最小支援計數相比較先淘汰一部分項集。

• 方法2:事務壓縮(壓縮排一步迭代的事務數)
– 不包含任何k-項集的事務不可能包含任何(k+1)-項集,這種事務在下一步的計算中可以加上標記或刪

• 方法3:劃分
– 挖掘頻繁項集只需要兩次資料掃描
– D中的任何頻繁項集必須作為區域性頻繁項集至少出現在一個部分中。
    • 第一次掃描:將資料劃分為多個部分並找到區域性頻繁項集
    • 第二次掃描:評估每個候選項集的實際支援度,以確定全域性頻繁項集

• 方法4:選樣(在給定資料的一個子集挖掘)
– 基本思想:選擇原始資料的一個樣本,在這個樣本上用Apriori演算法挖掘頻繁模式
– 通過犧牲精確度來減少演算法開銷,為了提高效率,樣本大小應該以可以放在記憶體中為宜,可以適當降低最小支援度來減少遺漏的頻繁模式
    • 可以通過一次全域性掃描來驗證從樣本中發現的模式
    • 可以通過第二此全域性掃描來找到遺漏的

• 方法5:動態項集計數
– 在掃描的不同點新增候選項集,這樣,如果一個候選項集已經滿足最少支援度,則在可以直接將它新增到頻繁項集,
而不必在這次掃描的以後對比中繼續計算.

Apriori演算法每次迴圈都要掃描一遍資料庫,用來計算候選項集的支援度。隨著項集長度增加,候選項集的個數逐漸減少,包含這些候選項集的事務也越來越少,但是掃描的事務量並沒有改變。
– 提高效率的方法:在後續迴圈中逐漸減少掃描的事務。

AprioriTid

– 基本定理
• 如果一個事務不包含頻繁k-項集,那麼該事務必然不包含頻繁(k+1)-項集。
– 由以上定理可知,把不包含頻繁k-項集的事務刪除後,不會影響計算長度更長(>k)的項集的支援度。
– 基於上述思想構成了AprioriTid演算法
• AprioriTid基本思想
– 在產生候選項集之後,構造一個Tid表,用來記錄每個事務包含的候選項集。候選k-項集的Tid表記做Ck,其形式為<t.Tid, {C∈Ck| C ⊆t}>,其中,Tid是事務t的標識,C是事務t中包含的候選k-項集。如果一個事務不包含任何候選k-項集,則這個事務就不會出現在Ck中。
– 對於k=1,C1 =TD;
– 對於k >1,Ck由Ck-1生成
    • 如果一個事務包含了一個候選k-項集的兩個頻繁(k-1)-項集,那麼其必然包含這個候選k-項集。
    • 故構造Ck的方法如下:
        – 對每個候選k-項集P,如果P的兩個頻繁(k-1)-項集都包含在Ck-1裡的某個記錄中,則新增P到Ck的相應記錄中。

示例


AprioriTid演算法
– 優點
    • 用逐漸減少的Tid表代替原來的事務資料庫
– 缺點
    • 在初始階段,尤其是第二次迴圈(發現頻繁2-項集),候選項集的個數非常多,導致構造的Tid表可能比原事務資料庫還要大很多。這時Apriori在效率上要優於AprioriTid
– AprioriHybral
    • 結合Apriori和AprioriTid的優點
    • 思想
        – 首先採用Apriori演算法,同時估計Tid表的大小。
        – 當Tid表減小到可以載入記憶體時,就轉而採用AprioriTid演算法

減少候選集數目
– Apriori演算法的複雜性與候選項集的數目有關,候選項集越多,構造的hash樹越大,執行時間就越長,因此,提高Apriori演算法的另外一個途徑就是減少候選項集數目。
    • Apriori演算法在構造候選k-項集的時候利用了頻繁k-1項集進行裁減,有效地降低了候選項集的數量。
    • 但是這個方法對生成候選2-項集基本上沒有太大作用。
        – 令頻繁1-項集個數為n,則候選2-項集個數為n(n-1)/2

三、頻繁圖挖掘

頻繁子圖挖掘

– 若干圖中找到最大的頻繁子圖



標號圖

– 一個標號圖是一個五元組,G={V,E,ΣE,ΣV,L}.其中,V代表圖中節點的集合,E⊆V×V代表圖中邊的集合.ΣV,ΣE分別代表節點標號的集合與邊標號的集合.L是標號函式,用於完成標號向節點和邊的對映:V→ΣV與E→ΣE. 

圖的同構

– 圖的同構是一個雙射f:V(G)↔V(G′).對於圖G={V,E,ΣV,ΣE,L}與圖G′={V′,E′,ΣV′,ΣE′, L′},若它們是同構的,則滿足如下條件: 
    • ∀u∈V,L(u)=L′(f(u)) 
    • ∀u,v∈V,((u,v)∈E)⇔((f(u),f(v))∈E′),且
    • ∀(u,v)∈E,L(u,v)=L′(f(u),f(v)). 

支援度

– 給定一個圖的集合GD,圖G的支援度記為SUPG,計算方法為GD中與G存在子圖同構的圖G′的個數與整個圖集中圖的個
數的比值,表示如下: 


頻繁圖/頻繁樹

– 給定一個圖集GD,GD={Gi|i=0,1,…,n},且給定最小支援度閾值為min_sup,我們稱圖G是頻繁的,當且僅當G的支援度不小於最小支援度閾值,即SUPG≥min_sup.相應地,當圖G是頻繁的且其中無迴路時,我們稱G為頻繁樹

類Apriori演算法





變種
– 點一致,邊一致
– 點一致,邊不一致(例如小於即可)
– 點不一致,邊一致
– 點,邊都不一致,連線關係一致