fp-growth(frequent pattern tree, 頻繁模式樹), 是韓家煒提出的挖掘頻繁項集的方法,是將資料集儲存在乙個特定的稱作 fp 樹的結構之後發現頻繁項集或頻繁項對,即常在一塊出現的元素項的集合 fp 樹。fp-growth 演算法比 apriori 演算法效率更高,在整個演算法執行過程中,只需遍歷資料集 2 次,就能夠完成頻繁模式發現,其發現頻繁項集的基本過程如下:(1)構建 fp樹(2)從 fp 樹中挖掘頻繁項集
fp-growth 的一般流程如下:1:先掃瞄一遍資料集,得到頻繁項為 1 的專案集,定義最小支援度(專案出現最少次數),刪除那些小於最小支援度的專案,然後將原始資料集中的條目按專案集中降序進行排列。2:第二次掃瞄,建立項頭表(從上往下降序),以及 fp 樹。3:對於每個專案(可以按照從下往上的順序)找到其條件模式基(cpb,conditional patten base), 遞迴呼叫樹結構,刪除小於最小支援度的項。如果最終呈現單一路徑的樹結構,則直接列舉所有組合;非單一路徑的則繼續呼叫樹結構,直到形成單一路徑即可。
tiditems
1i1, i2, i5
2i2, i4
3i2, i3
4i1, i2, i4
5i1, i3
6i2, i3
7i1, i3
8i1, i2, i3, i5
9i1, i2, i3
掃瞄資料集,對每個物品進行計數:
項集支援度i27
i16i36
i42i52
設最小支援度計數為2
掃瞄資料庫,統計支援度計數,得到頻繁1-項集,按支援度降序排列
tiditems
1i2,i1,i5
2i2, i4
3i2, i3
4i2,i1,i4
5i1, i3
6i2, i3
7i1, i3
8i2,i1,i3,i5
9i2,i1, i3
得到了fp樹和項頭表以及節點鍊錶,我們首先要從項頭表的底部項依次向上挖掘。對於項頭表對應於fp樹的每一項,我們要找到它的條件模式基。所謂條件模式基是以我們要挖掘的節點作為葉子節點所對應的fp子樹。得到這個fp子樹,我們將子樹中每個節點的的計數設定為葉子節點的計數,並刪除計數低於支援度的節點。從這個條件模式基,我們就可以遞迴挖掘得到頻繁項集了
從i
5i_5
i5開始,對於頭表中的每個iii_
ii,確定自身為頻繁模式,再挖掘以iii_
ii為字尾的頻繁模式
將所有的祖先節點計數設定為葉子節點的計數
字首路徑/條件模式基:
,i1: 1> 、 ,i1, i3:1 > 、,i1: 1> 、,i1, i3:1 > 頻繁模式: \( \(2的含義指的是i2, i5 i_2,i_5 i2,i5 都是2)\\ 提取以i4的字首路徑/條件模式基: 、(i1被砍掉了) i4為字尾的頻繁模式: \提取以i3為字尾的頻繁模式 有兩分支,則: 對於條件fp樹頭表中的每個ii,與i3連線確定頻繁模式ii, i3 ii,i3 ,支援度等於ii的支援度。 遞迴挖掘條件fp樹,提取以ii, i3 ii,i3 為字尾的頻繁模式 頻繁模式:\\ \以i 1i_1 i1為字尾 \i 2i_2 i2只有字首,沒有字尾 項條件模式基 條件fp樹 產生的頻繁模式 i5, , , i4, i3, , , , , i1 fp growth 演算法優缺點 優點 一般快於apriori 缺點 實現比較困難,在某些資料上效能下降 適用資料型別 標稱型資料 演算法思想 fp growth演算法是用來解決頻繁項集發現問題的,這個問題再前面我們可以通過apriori演算法來解決,但是雖然利用apriori原理加快了速度,仍舊是... 序列模式是頻繁模式的一種特殊情況,它們的應用範圍完全不一樣!如 購買物品 尿布 啤酒 可樂 麵包 尿布 啤酒 上述購物清單是兩個使用者的購物清單,根據上面的清單,我們可以發現尿布和啤酒組合起來一起購買的情況較多,因此超市可以根據這樣的頻繁項集分析,將尿布和啤酒放在較近的地方,或者將尿布和啤酒同時 等... dm實驗,寫的比較二,好多情況還沒有考慮,後續有時間會修改。開始的時候資料結構沒設計好導致寫到後面費了很大的勁 不過還好python的列表有起死回生的功效 資料集 database.txt i1,i2,i5 i2,i4 i2,i3 i1,i2,i4 i1,i3 i2,i3 i1,i3 i1,i2,i...FP growth高效頻繁項集發現
頻繁序列模式挖掘
頻繁模式挖掘 Apriori演算法