Python基礎原理:FP-growth演算法的構建

shenmanli發表於2017-12-11
和Apriori演算法相比,FP-growth演算法只需要對資料庫進行兩次遍歷,從而高效發現頻繁項集。對於搜尋引擎公司而言,他們需要通過檢視網際網路上的用詞,來找出經常在一塊出現的詞。因此就需要能夠高效的發現頻繁項集的方法,FP-growth演算法就可以完成此重任。


FP-growth演算法是基於Apriori原理的,通過將資料集儲存在FP(Frequent Pattern)樹上發現頻繁項集。
FP-growth演算法只需要對資料庫進行兩次掃描,而Apriori演算法在求每個潛在的頻繁項集時都需要掃描一次資料集,所以說FP-growth演算法是高效的。


FP演算法發現頻繁項集的過程是:
(1)構建FP樹;
(2)從FP樹中挖掘頻繁項集
FP表示的是頻繁模式,其通過連結來連線相似元素,被連起來的元素可看成是一個連結串列
將事務資料表中的各個事務對應的資料項,按照支援度排序後,把每個事務中的資料項按降序依次插入到一棵以 NULL為根節點的樹中,同時在每個結點處記錄該結點出現的支援度。


假設存在的一個事務資料樣例為,構建FP樹的步驟如下:

結合Apriori演算法中最小支援度的閾值,在此將最小支援度定義為3,結合上表中的資料,那些不滿足最小支援度要求的將不會出現在最後的FP樹中。


據此構建FP樹,並採用一個頭指標表來指向給定型別的第一個例項,快速訪問FP樹中的所有元素,構建的帶頭指標的FP樹如圖:



結合繪製的帶頭指標表的FP樹,對錶中資料進行過濾,排序如下:



在對資料項過濾排序了之後,就可以構建FP樹了,從NULL開始,向其中不斷新增過濾排序後的頻繁項集。過程可表示為:



這樣,FP樹對應的資料結構就建好了,現在就可以構建FP樹了,FP樹的構建函式參見Python原始碼。


在執行上例之前還需要一個真正的資料集,結合之前的資料自定義資料集。這樣就構建了FP樹,接下來就是使用它來進行頻繁項集的挖掘。

相關文章