關聯分析中尋找頻繁項集的FP-growth方法


關聯分析是數據挖掘中常用的分析方法。一個常見的需求比如說尋找出經常一起出現的項目集合。

引入一個定義,項集的支持度(support),是指所有包含這個項集的集合在所有數據集中出現的比例。

規定一個最小支持度,那么不小於這個最小支持度的項集稱為頻繁項集(frequent item set)。

 

如何找到數據集中所有的頻繁項集呢?

最簡單的方法是對所有項集進行統計,可以通過逐漸增大項集大小的方式來遍歷所有項集。比如說下面的數據集,先統計所有單個元素集合的支持度,{z} 的支持度為5 (這里把項目出現次數作為支持度,方便描述),然后逐漸增大項集大小,比如{z,r} 的支持度為1

數據集ID 數據
001 r, z, h, j, p
002 z, y, x, w, v, u, t, s
003 z
004 r, x, n, o, s
005 y, r, x, z, q, t, p
006 y, z, x, e, q, s, t, m

 顯然這樣的方式,計算量很大,當項目增多,項集的數目是指數增長的。當然我們也可以應用一些規律

1)如果一個項集是頻繁項集,那么它的子集都是頻繁項集

2)如果一個項集不是頻繁項集,那么它的超集也不是頻繁項集

Apriori算法就是應用了這些方法可以減少尋找頻繁項集的計算。而FP-Growth算法則另辟蹊徑,它在遍歷數據的時候構造一個樹結構,當樹構造完成,每個節點記錄的值就是這個節點到根節點路徑上的項集的支持度。

首先對數據集中的數據按單個元素的支持度進行重排

數據集ID 數據 按單元數支持度重排后的數據
001 r, z, h, j, p z, r
002 z, y, x, w, v, u, t, s z, x, y, s, t
003 z z
004 r, x, n, o, s x, s, r
005 y, r, x, z, q, t, p z, x, y, r, t
006 y, z, x, e, q, s, t, m z, x, y, s, t

然后把每一行數依次拿來構建FP樹。把重排后每一行數據從左到右入樹。從空集開始,如果樹中已存在現有元素,則增加現有元素的值;如果現有元素不存在,則向樹添加一個分支。

樹構造完成后,以{x:3}這個節點為例,它表示了從這個節點到根節點路徑上集合{x,z}的支持度為3。

那么問題來了,我們如何保證我們能獲得所有的頻繁項集,即支持度大於最小支持度的項集。是找出節點值大於最小支持度就夠了嗎?比如設最小支持度為3,從樹上可以看出{z,x,y}的支持度為3,但是仔細觀察{z,x,y,t}這個項集的支持度也是為3,如何做呢?

首先為每個元素的找到所有前綴路徑,一條前綴路徑,是指元素父節點到根節點的路徑

單元素 前綴路徑
z {}: 5
r {x, s}: 1, {z, x, y}: 1, {z}: 1
x {z}: 3, {}: 1
y {z, x}: 3
s {z, x, y}: 2, {x}: 1
t {z, x, y, s}: 2, {z, x, y, r}: 1

 然后對每個元素的所有前綴路徑再執行一次FP樹的構造過程,這樣看到去除這個元素后能得到什么樣的頻繁項集。如下可以順利得出{z,x,y} + {t}是一個支持度為3的頻繁項集。

據此,FP-Growth方法就可以算出數據集中最小支持度為3的頻繁項集:{z},{z,x},{z,x,y},{z,x,y,t}

 

參考:

1. https://www.cnblogs.com/qwertWZ/p/4510857.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM