Apriori算法的一個主要瓶頸在於,為了獲得較長的頻繁模式,需要生成大量的候選短頻繁模式。FP-Growth算法是針對這個瓶頸提出來的全新的一種算法模式。目前,在數據挖掘領域,Apriori和FP-Growth算法的引用次數均位列三甲。
FP的全稱是Frequent Pattern,在算法中使用了一種稱為頻繁模式樹(Frequent Pattern Tree)的數據結構。FP-tree是一種特殊的前綴樹,由頻繁項頭表和項前綴樹構成。所謂前綴樹,是一種存儲候選項集的數據結構,樹的分支用項名標識,樹的節點存儲后綴項,路徑表示項集。
一、FP-tree的生成方法
第二步根據支持度對頻繁項進行排序是本算法的關鍵。第一點,通過將支持度高的項排在前面,使得生成的FP-tree中,出現頻繁的項更可能被共享,從而有效地節省算法運行所需要的空間。第二點,通過這種排序,可以對FP-tree所包含的頻繁模式進行互斥的空間拆分,得到相互獨立的子集,而這些子集又組成了完整的信息。
二、FP-tree子集分割方法
如上圖,求p為前綴的投影數據庫:根據頭表的指針找到FP-tree的兩個p節點,搜索出從這兩個節點到樹的根節點路徑節點信息(包含支持度)。然后累加路徑節點信息的支持度,刪除非頻繁項。對剩下的頻繁項按照上一節的方法構建FP-tree。過程如下圖所示:

三、FP-Growth算法流程
基本思路是:不斷地迭代FP-tree的構造和投影過程。
對於每個頻繁項,構造它的條件投影數據庫和投影FP-tree。對每個新構建的FP-tree重復這個過程,直到構造的新FP-tree為空,或者只包含一條路徑。當構造的FP-tree為空時,其前綴即為頻繁模式;當只包含一條路徑時,通過枚舉所有可能組合並與此樹的前綴連接即可得到頻繁模式。
---------------------------------------------------------------------------------------------------
要點:
FP Growth是一種比Apriori更高效的頻繁項挖掘方法,它只需要掃描項目表2次。其中第1次掃描獲得當個項目的頻率,去掉不符合支持度要求的項,並對剩下的項排序。第2遍掃描是建立一顆FP-Tree(frequent-patten tree)。
接下來的工作就是在FP-Tree上進行挖掘。
比如說有下表:

它所對應的FP_Tree如下:
然后從頻率最小的單項P開始,找出P的條件模式基,用構造FP_Tree同樣的方法來構造P的條件模式基的FP_Tree,在這棵樹上找出包含P的頻繁項集。
依次從m,b,a,c,f的條件模式基上挖掘頻繁項集,有些項需要遞歸的去挖掘,比較麻煩,比如m節點,具體的過程可以參考博客: FrequentPattern 挖掘之二(FP Growth算法),里面講得很詳細。