三.FP-tree算法
下面介紹一種使用了與Apriori徹底不一樣的方法來發現頻繁項集的算法FP-tree。FP-tree算法在過程當中沒有像Apriori同樣產生候選集,而是採用了更爲緊湊的數據結構組織tree, 再直接從這個結構中提取頻繁項集。FP-tree算法的過程爲:html
首先對事務中的每一個項計算支持度,丟棄其中非頻繁的項,每一個項的支持度進行倒序排序。同時對每一條事務中的項也按照倒序進行排序。算法
根據每條事務中事務項的新順序,依此插入到一棵以Null爲根節點的樹中。同時記錄下每一個事務項的支持度。這個過程完成以後,咱們就獲得了棵FP-tree樹結構。數據庫
對構建完成的FP-tree,從樹結構的上方到下方對每一個項,將先前的路徑轉化爲條件FP-tree。數據結構
根據每棵條件FP-tree,找出全部頻繁項集。spa
這個對FP-tree算法過程的描述比較抽象,咱們經過下面這個例子具體地瞭解一下FP-tree算法是如何找到頻繁項集的。htm
(source: 數據挖掘:概念與技術Jiawei, Han)blog
首先對實務中的全部項集計算支持度,而後按照倒序排序,以下圖中的綠表所示。而後對每條事務中的項也按照這個倒序,從新排列。例如,對T100這個事務,原來是無序的Ⅰ1, Ⅰ2, Ⅰ5, 但由於Ⅰ2的支持度按照倒序排列在Ⅰ1以前,所以從新排序以後的順序爲Ⅰ2,Ⅰ1,Ⅰ5。通過從新排序後的事務的項集以下表中的第三列所示。排序
從新掃描事務庫,按照從新排序的項集的順序依次插入以NULL爲根節點的樹中。對事務T100, 依次建立Ⅰ2,Ⅰ1,Ⅰ5三個結點,而後能夠造成一條NULL→Ⅰ2→Ⅰ1→Ⅰ5的路徑,該路徑上全部結點的頻度計數記爲1。對事務T200,FP-tree中已經存在告終點Ⅰ2,因而造成一條NULL→Ⅰ2→Ⅰ4的路徑,同時建立一個Ⅰ4的節點。此事,Ⅰ2結點上的頻度計數增長1,記爲2,同時結點Ⅰ4的頻度計數記爲1。按照相同的過程,掃描完庫中的全部事務以後能夠獲得下圖的樹結構。事務
對於構建完成的FP-tree,從樹的底部開始依次構建每一個項的條件FP-tree。首先咱們在上圖中找到節點Ⅰ5,發現可以達到Ⅰ5的路徑有兩條{ Ⅰ2,Ⅰ1,Ⅰ5 :1}和{ Ⅰ2,Ⅰ1,Ⅰ3,Ⅰ5 :1}。get
基於這兩天路徑來構造Ⅰ5的條件tree如同下圖所示,其中Ⅰ3要被捨去,由於這裏Ⅰ3的計數爲1不能知足頻繁項集的條件。而後用Ⅰ5的前綴{ Ⅰ2,Ⅰ1:2}列舉全部與後綴Ⅰ5的組合,最終獲得{Ⅰ2,Ⅰ5 },{ Ⅰ2,Ⅰ1 }和{Ⅰ2,Ⅰ1,Ⅰ5 }三個頻繁項集。
對全部項執行上述步驟,咱們能夠獲得全部項產生的頻繁項集。
http://www.javashuo.com/article/p-phvwmtds-ea.html
優缺點評價:
FP-tree算法相對於Apriori算法,時間複雜度和空間複雜都有了顯著的提升。可是對海量數據集,時空複雜度仍然很高,此時須要用到數據庫劃分等技術。