第12章 使用FP-growth算法來高效發(fā)現(xiàn)頻繁集

FP-growth算法將數(shù)據(jù)集存儲在一個特定的稱作FP樹的結(jié)構(gòu)之后發(fā)現(xiàn)頻繁項集或者頻繁項集對椅亚,即常在一起出現(xiàn)的元素項的集合FP樹遇八。這種做法使得算法的執(zhí)行速度要快于Apriori算法雷蹂,性能要好兩個數(shù)量級以上。

FP-growth算法只需要對數(shù)據(jù)集記性兩次掃描就能判定給定模式是否頻繁朵你,當數(shù)據(jù)庫特別大時其優(yōu)勢越明顯崭添。但是這種算法不能用來發(fā)現(xiàn)關(guān)聯(lián)規(guī)則。它發(fā)現(xiàn)頻繁項集的過程:(1)構(gòu)建FP樹(2)從FP樹中挖掘頻繁項集吭历。

12.1? FP樹:用于編碼數(shù)據(jù)集的有效方式

FP-growth算法將數(shù)據(jù)存儲在一種稱為FP樹的緊湊數(shù)據(jù)結(jié)構(gòu)中堕仔。FP代表頻繁模式(Frequent Pattern)。

同搜索樹不同的是晌区,一個元素項可以在一棵FP樹中多次出現(xiàn)摩骨。FP樹會存儲項集的出現(xiàn)頻率,而每個項集會以路徑的方式存儲在樹中朗若。存在相似元素的集合會共享樹的一部分恼五。只有當集合之間完全不同時,樹才會分叉哭懈。樹節(jié)點上給出集合中單個元素及其在序列中出現(xiàn)的次數(shù)灾馒,路徑會給出該序列的出現(xiàn)次數(shù)。相似項之間的鏈接叫做節(jié)點鏈接遣总,用于快速發(fā)現(xiàn)相似項的位置睬罗。

FP-growth算法工作流程如下:首先構(gòu)建FP樹,然后利用它來挖掘頻繁項集旭斥。為構(gòu)建FP樹容达,需要對原始數(shù)據(jù)集掃描兩遍。第一遍對所有元素項的出現(xiàn)次數(shù)進行統(tǒng)計垂券,如果某元素是不頻繁的花盐,那么它的超集也是不頻繁的。數(shù)據(jù)庫第一遍掃描用來統(tǒng)計出現(xiàn)的頻率圆米,第二遍掃描中只考慮那些頻繁的元素卒暂。

12.2? 構(gòu)建FP樹

12.2.1? 創(chuàng)建FP樹的數(shù)據(jù)結(jié)構(gòu)


FP樹的數(shù)據(jù)結(jié)構(gòu)

12.2.2? 構(gòu)建FP樹

這里使用一個字典作為數(shù)據(jù)結(jié)構(gòu),來保存頭指針表娄帖。除了存放指針外也祠,頭指針表還可以用來保存FP樹中每個元素是總數(shù)。

第一次遍歷數(shù)據(jù)集會獲得每個元素項的出現(xiàn)頻率近速。接下來诈嘿,去掉不滿足最小支持度的元素項。在下一步構(gòu)建FP樹削葱。在構(gòu)建時奖亚,讀入每個項集并將其添加到一條已經(jīng)存在的路徑中。如果該路徑不存在析砸,則創(chuàng)建一條新路徑昔字。每個事務(wù)都是一個無序集合。在將集合添加到樹之前,需要對每個集合排序作郭。排序基于元素項的絕對出現(xiàn)頻率進行陨囊。在對事務(wù)記錄過濾和排序之后,就可以侯建FP樹了夹攒。從空集開始蜘醋,向其中不斷添加頻繁項集。過濾咏尝、排序后的事務(wù)依次添加到樹中压语。如果樹中已存在現(xiàn)有元素,則增加現(xiàn)有元素的值编检。如果現(xiàn)有元素不存在胎食,則向樹添加一個分枝。

FP樹

上面給的是元素項及其對應的頻率計數(shù)值允懂,其中每個縮進表示所處的樹的深度斥季。

12.3? 從一棵FP樹中挖掘頻繁項集

有了FP樹之后,就可以抽取頻繁項集了累驮。首先從單元素項集合開始,然后在此基礎(chǔ)上逐步構(gòu)建更大的集合舵揭。

從FP樹中抽取頻繁項集的三個基本步驟:(1)從FP樹中獲得條件模式基谤专;(2)利用條件模式基,構(gòu)建一個條件FP樹午绳;(3)迭代重復步驟1和2 置侍,直到樹包含一個元素項為止。

我們重點關(guān)注步驟(1)拦焚,即尋找條件模式基蜡坊。之后,為每一個條件模式基創(chuàng)建對應的條件FP樹赎败。最后構(gòu)造少許代碼封裝上述兩個函數(shù)秕衙,并從FP樹中獲得頻繁項集。

12.3.1? 抽取條件模式基

首先從上一節(jié)發(fā)現(xiàn)的已經(jīng)保存在頭指針表中的單個頻繁元素項開始僵刮。對于每一個元素項据忘,獲得其對應的條件模式基(conditional pattern base)。條件模式基是以所查找元素項為結(jié)尾的路徑集合搞糕。每一條路徑其實都是一條前綴路徑(prefix path)勇吊。簡而言之,一條前綴路徑是介于所查找元素項與根節(jié)點之間的所有內(nèi)容窍仰。

每一條前綴路徑都與一個計數(shù)值關(guān)聯(lián)汉规。前綴路徑將用于構(gòu)建條件FP樹。為了獲得這些前綴路徑驹吮,可以對樹進行窮舉式搜索针史,直到獲得想要的頻繁項為止晶伦,或者使用一個更有效的方法來加速搜索過程∥蛎瘢可以利用先前創(chuàng)建的頭指針表來得到一種更有效的方法坝辫。頭指針表包含相同類型元素鏈表的起始指針。一旦到達了每一個元素項射亏,就可以上溯這棵樹直到根節(jié)點為止近忙。

構(gòu)建樹的實際效果

有了條件模式基,就可以創(chuàng)建條件FP樹智润。

12.3.2? 創(chuàng)建條件FP樹

對每個頻繁項及舍,都要創(chuàng)建一棵條件FP樹。我們可以使用剛才發(fā)現(xiàn)的條件模式基作為輸入數(shù)據(jù)窟绷,并通過相同的建樹代碼來構(gòu)架這些樹锯玛。然后,我們會遞歸地發(fā)現(xiàn)頻繁項兼蜈、發(fā)現(xiàn)條件模式基攘残,以及發(fā)現(xiàn)另外的條件樹。

12.4? 本章小結(jié)

FP-growth算法是一種用于發(fā)現(xiàn)數(shù)據(jù)集中頻繁模式的有效方法为狸。FP-growth算法利用Apriori算法的原則歼郭,但只對數(shù)據(jù)集掃描兩次,執(zhí)行更快辐棒。在FP-growth算法中病曾,數(shù)據(jù)集存儲在一個稱為FP樹的結(jié)構(gòu)中。FP樹構(gòu)建完成后漾根,可以通過查找元素項的條件基及構(gòu)建條件樹來發(fā)現(xiàn)頻繁項集泰涂。該過程不斷以更多元素作為條件重復進行,直到FP樹中只包含一個元素為止辐怕。

使用FP-growth算法可以在多種文本文檔中查找頻繁單詞逼蒙,本文沒有實踐和記錄實例。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秘蛇,一起剝皮案震驚了整個濱河市其做,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赁还,老刑警劉巖妖泄,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異艘策,居然都是意外死亡蹈胡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罚渐,“玉大人却汉,你說我怎么就攤上這事『刹ⅲ” “怎么了合砂?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長源织。 經(jīng)常有香客問我翩伪,道長,這世上最難降的妖魔是什么谈息? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任缘屹,我火速辦了婚禮,結(jié)果婚禮上侠仇,老公的妹妹穿的比我還像新娘轻姿。我一直安慰自己,他們只是感情好逻炊,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布互亮。 她就那樣靜靜地躺著,像睡著了一般余素。 火紅的嫁衣襯著肌膚如雪胳挎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天溺森,我揣著相機與錄音,去河邊找鬼窑眯。 笑死屏积,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的磅甩。 我是一名探鬼主播炊林,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼卷要!你這毒婦竟也來了渣聚?” 一聲冷哼從身側(cè)響起拍顷,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤租悄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后岸夯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓶堕,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡隘道,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谭梗。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡忘晤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出激捏,到底是詐尸還是另有隱情设塔,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布远舅,位于F島的核電站闰蛔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏表谊。R本人自食惡果不足惜钞护,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爆办。 院中可真熱鬧难咕,春花似錦、人聲如沸距辆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跨算。三九已至爆土,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诸蚕,已是汗流浹背步势。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留背犯,地道東北人坏瘩。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像漠魏,于是被迫代替她去往敵國和親倔矾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容