1. 程式人生 > >【機器學習實戰】FP-growth演算法詳解

【機器學習實戰】FP-growth演算法詳解

Here is code

背景

apriori演算法 需要多次掃描資料,I/O 大大降低了時間效率

1. fp-tree資料結構

1> 項頭表

記錄所有的1項頻繁集出現的次數,並降序排列

2> fp tree

根據項頭表,構建fp樹

3> 節點連結串列

所有項頭表的1項頻繁集都是一個節點連結串列的頭,依次指向fp樹中的位置,而且方便查詢和更新

2. 項頭表的建立

這裡寫圖片描述
排序後的資料集進行了兩步操作:
1> 刪除每行關鍵字中支援度小於minSup的
2> 對關鍵字中剩下的元素按照支援度排序

3. fp tree和節點連結串列一起構建

開始節點為空
首先插入第一行關鍵字
這裡寫圖片描述
接著插入第二行關鍵字,如果有重複的字首路徑,則路徑上的節點+1
這裡寫圖片描述
.
.
.
,
,
.
.
類似的我們插入所有的資料之後,fptree和連結串列也都建好了,下圖即為最後的tree和節點連結串列
這裡寫圖片描述

4.FP Tree的挖掘

對項頭表從底部依次向上挖掘頻繁集,對於項頭表對應於fp樹的每一項,我們要找到它的條件模式基(所有的路徑字首),更新該路徑的節點數目。
F:
這裡寫圖片描述
D:
這裡寫圖片描述

這裡寫圖片描述
最後是A,因為條件模式基為空,所以可不用挖掘
由此,我們得到了所有的頻繁集(> 0.2),如果只要最大的頻繁k項集,從上面分析可以看出,最大的是5項集,A----C----E----B----F

5.FP Tree步驟總結

1> 掃描資料,得到所有頻繁一項集的計數,按照支援度保留滿足的項,將頻繁一項集放入項頭表,並按降序排列
2> 掃描資料,重置原始資料(刪除非頻繁一項集,並按支援度排序)
3> 讀入排序後的資料集,插入FP樹,並構建節點連結串列
4> 挖掘頻繁資訊,按照項頭表,從底向上依次尋找頻繁集。

參考博主