關聯分析——FP-growth演算法
使用FP-growth演算法來高效發現頻繁項集
FP-growth演算法基於Apriori構建,但採用了高階的資料結構減少掃描次數,大大加快了演算法速度。FP-growth演算法只需要對資料庫進行兩次掃描,而Apriori演算法對於每個潛在的頻繁項集都會掃描資料集判定給定模式是否頻繁,因此FP-growth演算法的速度要比Apriori演算法快。
FP-growth演算法發現頻繁項集的基本過程如下:
- 構建FP樹
- 從FP樹中挖掘頻繁項集
FP-growth演算法
- 優點:一般要快於Apriori。
- 缺點:實現比較困難,在某些資料集上效能會下降。
- 適用資料型別:離散型資料。
4.1 FP樹:用於編碼資料集的有效方式
FP-growth演算法將資料儲存在一種稱為FP樹的緊湊資料結構中。FP代表頻繁模式(Frequent Pattern)。一棵FP樹看上去與電腦科學中的其他樹結構類似,但是它通過連結(link)來連線相似元素,被連起來的元素項可以看成一個連結串列。圖5給出了FP樹的一個例子。
圖5 一棵FP樹,和一般的樹結構類似,包含著連線相似節點(值相同的節點)的連線
與搜尋樹不同的是,一個元素項可以在一棵FP樹種出現多次。FP樹輝儲存項集的出現頻率,而每個項集會以路徑的方式儲存在數中。存在相似元素的集合會共享樹的一部分。只有當集合之間完全不同時,樹才會分叉。 樹節點上給出集合中的單個元素及其在序列中的出現次數,路徑會給出該序列的出現次數。
相似項之間的連結稱為節點連結(node link),用於快速發現相似項的位置。
舉例說明,下表用來產生圖5的FP樹:
事務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 |
對FP樹的解讀:
圖5中,元素項z出現了5次,集合{r, z}出現了1次。於是可以得出結論:z一定是自己本身或者和其他符號一起出現了4次。集合{t, s, y, x, z}出現了2次,集合{t, r, y, x, z}出現了1次,z本身單獨出現1次。就像這樣,FP樹的解讀方式是讀取某個節點開始到根節點的路徑。路徑上的元素構成一個頻繁項集,開始節點的值表示這個項集的支援度。根據圖5,我們可以快速讀出項集{z}的支援度為5、項集{t, s, y, x, z}的支援度為2、項集{r, y, x, z}的支援度為1、項集{r, s, x}的支援度為1。FP樹中會多次出現相同的元素項,也是因為同一個元素項會存在於多條路徑,構成多個頻繁項集。但是頻繁項集的共享路徑是會合並的,如圖中的{t, s, y, x, z}和{t, r, y, x, z}
和之前一樣,我們取一個最小閾值,出現次數低於最小閾值的元素項將被直接忽略。圖5中將最小支援度設為3,所以q和p沒有在FP中出現。
FP-growth演算法的工作流程如下。首先構建FP樹,然後利用它來挖掘頻繁項集。為構建FP樹,需要對原始資料集掃描兩遍。第一遍對所有元素項的出現次數進行計數。資料庫的第一遍掃描用來統計出現的頻率,而第二遍掃描中只考慮那些頻繁元素。
4.2 構建FP樹
1 建立FP樹的資料結構
由於樹節點的結構比較複雜,我們使用一個類表示。建立檔案fpGrowth.py並加入下列程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class treeNode:
def __init__( self ,
nameValue, numOccur, parentNode):
self .name
= nameValue
self .count
= numOccur
self .nodeLink
= None
self .parent
= parentNode
self .children
= {}
def inc( self ,
numOccur):
self .count
+ = numOccur
def disp( self ,
ind = 1 ):
print '
' * ind,
self .name,
'
' ,
self .count
for child
in self .children.values():
相關推薦關聯分析——FP-growth演算法使用FP-growth演算法來高效發現頻繁項集 FP-growth演算法基於Apriori構建,但採用了高階的資料結構減少掃描次數,大大加快了演算法速度。FP-growth演算法只需要對資料庫進行兩次掃描,而Apriori演算法對於每個潛在的頻繁項集都會掃描資料 《機器學習實戰》使用Apriori演算法和FP-growth演算法進行關聯分析(Python版)===================================================================== 《機器學習實戰》系列部落格是博主閱讀《機器學 關聯分析(一)--FP-Growth演算法轉自:https://www.cnblogs.com/datahunter/p/3903413.html 關聯分析又稱關聯挖掘,就是在交易資料、關係資料或其他資訊載體中,查詢存在於專案集合或物件集合之間的頻繁模式、關聯、相關性或因果結構。關聯分析的一個典型例子是購物籃分析。通過發現顧客放入購物籃 基於FP-Growth演算法的關聯性分析——學習筆記資料探勘 比之前的Ap快,因為只遍歷兩次。 降序 一、構建FP樹 對頻繁項集排序,以構成共用關係。 二、基於FP樹的頻繁項分析 看那個模式基出現過幾次。頻繁度。 看洗髮液的 去掉頻繁 機器學習之Apriori演算法和FP-growth演算法1 關聯分析 無監督機器學習方法中的關聯分析問題。關聯分析可以用於回答"哪些商品經常被同時購買?"之類的問題。 2 Apriori演算法 頻繁項集即出現次數多的資料集 支援度就是幾個關聯的資料在資料集中出現的次數佔總資料集的比重。或者說幾個資料關聯出現的概率。 置信度體現了一個數據出現後,另 機器學習 (十五) 關聯分析之Apriori演算法前言 目前隨著資料量迅速增多,從海量資料中尋找有價值的資訊帶來的成本也在不斷增加,傳統的搜尋資料方式已經不能滿足我們的需要,我們先來通過一個演算法看一下演算法時間複雜度快慢帶來的影響,通過計算耗時我們會有個感性 第12章:使用FP-growth演算法高效發現頻繁項集原理:通過構建FP樹,在FP樹中發現頻繁項集。如下圖所示。 由圖可知FP樹包含頭指標,父節點,節點的名字,節點的值,節點連結值(虛線),節點的孩子節點,因此構建類定義樹結構,如下所示: class treeNode: d 【機器學習實戰】FP-growth演算法詳解Here is code 背景 apriori演算法 需要多次掃描資料,I/O 大大降低了時間效率 1. fp-tree資料結構 1> 項頭表 記錄所有的1項頻繁集出現的次數,並降序排列 2> fp tree 根據項頭表,構建fp樹 3> Apriori演算法+FP-Growth演算法Apriori演算法 一、關聯分析 關聯分析是在大規模資料集中尋找有趣關係的任務,有兩種形式:頻繁項集(frequent item sets)和關聯規則(association rules)。頻繁項集是經常出現在一塊兒的物品的集合,關聯規則暗示兩種物品之間可能存在很強的關係。 1、一個項 機器學習實戰——使用FP-growth演算法來發現頻繁集問題:RuntimeError: dictionary changed size during iteration #問題程式碼 for k in headerTable.keys(): if headerTable[k]< minSup: 關聯分析之Apriori演算法1.資料探勘與關聯分析 資料探勘是一個比較龐大的領域,它包括資料預處理(清洗去噪)、資料倉庫、分類聚類、關聯分析等。關聯分析可以算是資料探勘最貼近我們生活的一部分了,開啟卓越亞馬遜,當挑選一本《Android4高階程式設計》時,它會不失時機的列出你可能還會感興趣的書籍,比如 頻繁模式演算法之FP-Growth演算法https://wenku.baidu.com/view/c32bbada27d3240c8547ef1b.html 跳轉到FP演算法講解PPT 1、構建FP樹 (1)掃描頻繁事務集,調整資料庫 關於spark執行FP-growth演算法報錯com.esotericsoftware.kryo.KryoExceptionSpark執行FP-growth異常報錯 在spark1.4版上嘗試執行頻繁子項挖掘演算法是,照搬官方提供的python案例原始碼時,爆出該錯誤com.esotericsoftware.kryo.KryoException (java.lang.Illegal 程式碼註釋:機器學習實戰第12章 使用FP-growth演算法來高效發現頻繁項集寫在開頭的話:在學習《機器學習實戰》的過程中發現書中很多程式碼並沒有註釋,這對新入門的同學是一個挑戰,特此貼出我對程式碼做出的註釋,僅供參考,歡迎指正。 #coding:gbk #作用:FP樹中節點的類定義 #輸入:無 #輸出:無 class treeNode: 使用spark讀取es中的資料並進行資料清洗,使用fp-growth演算法進行加工最近學了spark,用fg-growth演算法進行資料的關聯排序 object HelloPFg { def main(args: Array[String]) { val conf = new SparkConf().setAppName("Spark M 嫌棄Apriori演算法太慢?使用FP-growth演算法讓你的資料探勘快到飛起本文始發於個人公眾號:**TechFlow**,原創不易,求個關注 今天是機器學習專題的第20篇文章,我們來看看FP-growth演算法。 這個演算法挺冷門的,至少比Apriori演算法冷門。很多資料探勘的教材還會提一提Apriori,但是提到FP-growth的相對要少很多。原因也簡單,因為從功能的 python關聯分析 __機器學習之FP-growth頻繁項集演算法FP-growth演算法 專案背景/目的 對於廣告投放而言,好的關聯會一定程度上提高使用者的點選以及後續的諮詢成單 對於產品而言,關聯分析也是提高產品轉化的重要手段,也是大多商家都在做的事情,尤其是電商平臺 曾經我用SPSS Modeler做過Apriori關聯分析模型,也能 python關聯分析__機器學習之FP-growth頻繁項集演算法FP-growth演算法 專案背景/目的 對於廣告投放而言,好的關聯會一定程度上提高使用者的點選以及後續的諮詢成單 對於產品而言,關聯分析也是提高產品轉化的重要手段,也是大多商家都在做的事情,尤其是電商平臺 曾經我用SPSS Modeler做過Apriori關聯 關聯規則演算法Apriori以及FP-growth學習關聯規則演算法Apriori以及FP-growth學習 最近選擇了關聯規則演算法進行學習,目標是先學習Apriori演算法,再轉FP-growth演算法,因為Spark-mllib庫支援的關聯演算法是FP,隨筆用於邊學邊記錄,完成後再進行整理 一、概述 關聯規則是一種常見的推薦演算法,用於從發現 關聯分析(Apriori,FP-growth)關聯分析是資料探勘中的重要組成部分,旨在挖掘資料中的頻繁模式。我們可以通過一個案例資料庫挖掘著名案例來大致瞭解挖掘頻繁項集併產生關聯規則。 關聯分析的基本概念 關聯分析:在大規模資料集中尋找有趣的關係 頻繁項集:經常出現在一起的物品集合,即包含0個或者多個項的集合 關 |