經典fp-growth演算法
1.背景:
眾所周知,apriori演算法在產生頻繁模式完全集前需要對資料庫進行多次掃瞄,同時產生大量的候選頻繁集,這
就使apriori演算法時間和空間複雜度較大。但是apriori演算法中有乙個很重要的性質:頻繁項集的所有非空子集都必
須也是頻繁的。由此性質,引出了fp-growth演算法。
2.演算法說明
首先介紹fp-growth演算法中的幾個概念
a.fp-tree:將事務資料表中的各個事務資料項按照支援度排序後,把每個事務中的資料項按降序依次插入到一棵以null為根結點的樹中,同時在每個結點處記錄該結點出現的支援度。
b.條件模式基:包含fp-tree中與字尾模式一起出現的字首路徑的集合
c.條件樹:將條件模式基按照fp-tree的構造原則形成的乙個新的fp-tree
步驟(一):
挖掘頻繁模式前首先要構造fp-tree,演算法為碼如下:
輸入:乙個交易資料庫db和乙個最小支援度threshold.
輸出:它的fp-tree.
步驟:1.掃瞄資料庫db一遍.得到頻繁項的集合f和每個頻繁項的支援度.把f按支援度遞降排序,結果記為l.
2.建立fp-tree的根節點,記為t,並且標記為』null』.然後對db中的每個事務trans做如下的步驟.
根據l中的順序,選出並排序trans中的事務項.把trans中排好序的事務項列表記為[p|p],其中p是第乙個元素,p是列表的剩餘部分.呼叫insert_tree([p|p],t).
函式insert_tree([p|p],t)的執行如下.
如果t有乙個子結點n,其中n.item-name=p.item-name,則將n的count域值增加1;否則,建立乙個新節點n,使它的count為1,使它的父節點為t,並且使它的node_link和那些具有相同item_name域串起來.如果p非空,則遞迴呼叫insert_tree(p,n).
注:構造fp-tree的演算法理解上相對簡單,所以不過多描述
步驟(二):
對fp-tree進行挖掘,演算法如下:
輸入:一棵用演算法一建立的樹tree
輸出:所有的頻繁集
步驟:呼叫fp-growth(tree,null).
procedure fp-growth ( tree, x)}
Apriori演算法和FP growth演算法比較
關聯分析可以用於回答 哪些商品經常被同時購買?之類的問題 關聯分析是在大規模資料集中尋找有趣關係的任務,這些關係可以有兩種形式 頻繁項集 是經常出現在一塊兒的物品的集合 關聯規則 按時兩種物品之間可能存在很強的關係。支援度是針對項集來說的,因此可以定義乙個最小支援度,而只保留滿足最小值尺度的項集。可...
Apriori演算法和FP growth演算法
經典的關聯規則挖掘演算法包括apriori演算法和fp growth演算法。apriori演算法多次掃瞄交易資料庫,每次利用候選頻繁集產生頻繁集 而fp growth則利用樹形結構,無需產生候選頻繁集而是直接得到頻繁集,大大減少掃瞄交易資料庫的次數,從而提高了演算法的效率。但是apriori的演算法...
FPGrowth演算法理論
背景 頻繁項集挖掘演算法用於挖掘 經常一起出現的item集合 稱為頻繁項集 通過挖掘出這些頻繁項集,當在乙個事務中出現頻繁項集的其中乙個item,則可以把該頻繁項集的其他item作為推薦 比如經典的購物籃分析中啤酒 尿布故事,啤酒和尿布經常在使用者的購物籃中一起出現,通過挖掘出啤酒 尿布這個啤酒項集...