挖掘頻繁模、關聯和相關性(2)

頻繁項集挖掘方法

Apriori算法

  • 先驗性質:頻繁項集的所有非空子集也一定是頻繁的。

如果項集I 不滿足最小支持度閾值min_sup ,則I 不是頻繁的,即P(I)<min_sup 。如果把項A添加到項集 I 中,則結果項集(IA) 不可能比 I 更頻繁出現。因此,IA 也不是頻繁的,既P(IA)<min_sup
該性質屬於一類特殊的性質,成爲反單調性(antimonotone) 意指如果一個集合不能通過測試,則他的所有超集也不能通過相同的測試。

Apriori算法實例:使用Apriori算法發現下圖中的頻繁項集。
算法實例

求解過程如下圖所示:
這裏寫圖片描述

Apriori算法僞代碼:
這裏寫圖片描述

Method:
(1) 找出頻繁1 項集的集合 L1
(2)在第2~10步,對於k2Lk1 用於產生候選Ck ,以便找出Lk
(3)apriori_gen 過程產生候選,然後使用先驗性質刪除那些具有非頻繁自己的候選。
(4)掃描數據庫。
(5)用於每個事務,使用subset 函數找出該事務中是候選的所有子集。
(6)(7)對每個這樣的候選累加計數。
(9)所有滿足最小支持度的候選形成頻繁項集的集合L

apriori_gen 做兩個動作:連接和剪枝。
has_infrequent_subset 使用先驗性質刪除具有非頻繁自己的候選。

Frequent-Pattern Growth,FP-growth

轉自 http://blog.csdn.net/sealyao/article/details/6460578

FPTree算法:在不生成候選項的情況下,完成Apriori算法的功能。

FPTree算法的基本數據結構,包含一個一棵FP樹和一個項頭表,每個項通過一個結點鏈指向它在樹中出現的位置。基本結構如下所示。需要注意的是項頭表需要按照支持度遞減排序,在FPTree中高支持度的節點只能是低支持度節點的祖先節點。

FPTree

另外還要交代一下FPTree算法中幾個基本的概念:

FP-Tree:就是上面的那棵樹,是把事務數據表中的各個事務數據項按照支持度排序後,把每個事務中的數據項按降序依次插入到一棵以NULL爲根結點的樹中,同時在每個結點處記錄該結點出現的支持度。

條件模式基:包含FP-Tree中與後綴模式一起出現的前綴路徑的集合。也就是同一個頻繁項在PF樹中的所有節點的祖先路徑的集合。比如I3在FP樹中一共出現了3次,其祖先路徑分別是{I2,I1:2(頻度爲2)},{I2:2}和{I1:2}。這3個祖先路徑的集合就是頻繁項I3的條件模式基。

條件樹:將條件模式基按照FP-Tree的構造原則形成的一個新的FP-Tree。比如上圖中I3的條件樹就是:

sub FP-tree

1、 構造項頭表:掃描數據庫一遍,得到頻繁項的集合F和每個頻繁項的支持度。把F按支持度遞降排序,記爲L。

2、 構造原始FPTree:把數據庫中每個事物的頻繁項按照L中的順序進行重排。並按照重排之後的順序把每個事物的每個頻繁項插入以null爲根的FPTree中。如果插入時頻繁項節點已經存在了,則把該頻繁項節點支持度加1;如果該節點不存在,則創建支持度爲1的節點,並把該節點鏈接到項頭表中。

3、 調用FP-growth(Tree,null)開始進行挖掘。僞代碼如下:

僞代碼

FP-growth是整個算法的核心,再多囉嗦幾句。

FP-growth函數的輸入:tree是指原始的FPTree或者是某個模式的條件FPTree,a是指模式的後綴(在第一次調用時a=NULL,在之後的遞歸調用中a是模式後綴)

FP-growth函數的輸出:在遞歸調用過程中輸出所有的模式及其支持度(比如{I1,I2,I3}的支持度爲2)。每一次調用FP_growth輸出結果的模式中一定包含FP_growth函數輸入的模式後綴。

我們來模擬一下FP-growth的執行過程。

1、 在FP-growth遞歸調用的第一層,模式前後a=NULL,得到的其實就是頻繁1-項集。

2、 對每一個頻繁1-項,進行遞歸調用FP-growth()獲得多元頻繁項集。

下面舉兩個例子說明FP-growth的執行過程。

1、I5的條件模式基是(I2 I1:1), (I2 I1 I3:1),I5構造得到的條件FP-樹如下。然後遞歸調用FP-growth,模式後綴爲I5。這個條件FP-樹是單路徑的,在FP_growth中直接列舉{I2:2,I1:2,I3:1}的所有組合,之後和模式後綴I5取並集得到支持度>2的所有模式:{ I2 I5:2, I1 I5:2, I2 I1 I5:2}。

這裏寫圖片描述

2、I5的情況是比較簡單的,因爲I5對應的條件FP-樹是單路徑的,我們再來看一下稍微複雜一點的情況I3。I3的條件模式基是(I2 I1:2), (I2:2), (I1:2),生成的條件FP-樹如左下圖,然後遞歸調用FP-growth,模式前綴爲I3。I3的條件FP-樹仍然是一個多路徑樹,首先把模式後綴I3和條件FP-樹中的項頭表中的每一項取並集,得到一組模式{I2 I3:4, I1 I3:4},但是這一組模式不是後綴爲I3的所有模式。還需要遞歸調用FP-growth,模式後綴爲{I1,I3},{I1,I3}的條件模式基爲{I2:2},其生成的條件FP-樹如右下圖所示。這是一個單路徑的條件FP-樹,在FP_growth中把I2和模式後綴{I1,I3}取並得到模式{I1 I2 I3:2}。理論上還應該計算一下模式後綴爲{I2,I3}的模式集,但是{I2,I3}的條件模式基爲空,遞歸調用結束。最終模式後綴I3的支持度>2的所有模式爲:{ I2 I3:4, I1 I3:4, I1 I2 I3:2}

這裏寫圖片描述這裏寫圖片描述

根據FP-growth算法,最終得到的支持度>2頻繁模式如下:

這裏寫圖片描述

FP-growth算法比Apriori算法快一個數量級,在空間複雜度方面也比Apriori也有數量級級別的優化。但是對於海量數據,FP-growth的時空複雜度仍然很高,可以採用的改進方法包括數據庫劃分,數據採樣等等。

等價類變換(Equivalence CLAss Transformation,Eclat)算法

  • 水平數據格式(horizontal data format):{TID:itemset}
  • 垂直數據格式(vertical data format):{item:TID_set}

Apriori算法的例子,使用垂直數據格式掃描結果如下。
一項集
設置最小支持度爲2那麼所有項集都是頻繁一項集。

5項集要進行10次交運算(C25 ) ,其中,{I1,I4}{I3,I5} 都只包含一個事務,因此他們都不屬於頻繁2項集。
二項集

根據先驗性質,一個給定的3項集是候選3項集,僅當它的每一個2項集子集都是頻繁的。
三項集

通過探查垂直數據格式挖掘頻繁項集的過程,首先,通過掃描一次數據集,把水平格式的數據轉換成垂直格式。相機的支持度技術簡單地等於項集TID集的長度。從 k=1 開始可以根據先驗性質,使用頻繁 k 項集來構造候選 (k+1) 項集。通過取頻繁 k 項集的TID集的交,計算對應的 (k+1) 相機的TID集。重複該過程,每次 k 增加1,知道不能在找到頻繁項集或候選項集。

算法優點:除了在產生候選 (k+1) 項集時利用先驗性質外,這種方法的另一有點是不虛言掃描數據庫來確定 (k+1) 項集的支持度 (k1) 。這是因爲每個 k 項集的TID集懈怠了計算支持度的完整信息。然後,TID集可能很長,需要大量內存空間,長集合和的交運算還需要大量的計算時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章