日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【机器学习】数据挖掘算法——关联规则(三),FP-growth算法

發布時間:2023/12/20 79 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习】数据挖掘算法——关联规则(三),FP-growth算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

??上一篇文章介紹了用來挖掘發現強關聯規則的Apriori算法。同時也知道了Apriori算法在實現過程中由于需要頻繁的掃描數據集導致效率較低。

??FP-growth算法基于Apriori構建,但采用了高級的數據結構減少掃描次數,大大加快了算法速度。FP-growth算法只需要對數據庫進行兩次掃描,而Apriori算法對于每個潛在的頻繁項集都會掃描數據集判定給定模式是否頻繁,因此FP-growth算法的速度要比Apriori算法快。

FP-growth算法優缺點
  • 優點:
  • 因為 FP-growth 算法只需要對數據集遍歷兩次,所以速度更快。
  • FP樹將集合按照支持度降序排序,不同路徑如果有相同前綴路徑共用存儲空間,使得數據得到了壓縮。
  • 不需要生成候選集。
  • 比Apriori更快。
    • 缺點:
  • FP-Tree第二次遍歷會存儲很多中間過程的值,會占用很多內存。
  • 構建FP-Tree是比較昂貴的。
    適用數據類型:標稱型數據(離散型數據)。
  • FP-growth算法發現頻繁項集的基本過程如下:
  • 構建FP樹
  • 從FP樹中挖掘頻繁項集
  • 為構建FP樹,需要對原始數據集掃描兩遍。第一遍對所有元素項的出現次數進行計數。數據庫的第一遍掃描用來統計出現的頻率,而第二遍掃描中只考慮那些頻繁元素

    FP樹 介紹

    • FP樹的節點結構如下:
    class treeNode:def __init__(self, nameValue, numOccur, parentNode):self.name = nameValue # 節點名稱self.count = numOccur # 節點出現次數self.nodeLink = None # 不同項集的相同項通過nodeLink連接在一起# needs to be updatedself.parent = parentNode # 指向父節點self.children = {} # 存儲葉子節點

    FP-growth 原理

    基于數據構建FP樹

    步驟1:

    1. 遍歷所有的數據集合,計算所有項的支持度。
    2. 丟棄非頻繁的項。
    3. 基于 支持度 降序排序所有的項。

    4. 所有數據集合按照得到的順序重新整理。
    5. 重新整理完成后,丟棄每個集合末尾非頻繁的項。

    步驟2:

    1. 讀取每個項集插入FP樹中,同時用一個頭部鏈表數據結構維護不同集合的相同項。

    最終得到下面這樣一棵FP樹

    步驟3:

    從FP樹中挖掘出頻繁項集

    1. 對頭部鏈表進行降序排序
    2. 對頭部鏈表節點從小到大遍歷,得到條件模式基,同時獲得一個頻繁項集。

    如上圖,從頭部鏈表 t 節點開始遍歷,t 節點加入到頻繁項集。找到以 t 節點為結尾的路徑如下:

    ??去掉FP樹中的t節點,得到條件模式基([路徑]:值),[z,x,y,s,t]:2,[z,x,y,r,t]:1 。條件模式基的值取決于末尾節點 t ,因為 t 的出現次數最小,一個頻繁項集的支持度由支持度最小的項決定。所以 t 節點的條件模式基的值可以理解為對于以 t 節點為末尾的前綴路徑出現次數。

    3. 條件模式基繼續構造條件 FP樹, 得到頻繁項集,和之前的頻繁項組合起來,這是一個遞歸遍歷頭部鏈表生成FP樹的過程,遞歸截止條件是生成的FP樹的頭部鏈表為空。

    根據步驟 2 得到的條件模式基 [z,x,y,s,t]:2,[z,x,y,r,t]:1 作為數據集繼續構造出一棵FP樹,計算支持度,去除非頻繁項,集合按照支持度降序排序,重復上面構造FP樹的步驟。最后得到下面 t-條件FP樹 :

    據 t-條件FP樹 的頭部鏈表進行遍歷,從 y 開始。得到頻繁項集 [t,y] 。然后又得到 y 的條件模式基,構造出 [t,y] 的條件FP樹,即 ty-條件FP樹。繼續遍歷ty-條件FP樹的頭部鏈表,得到頻繁項集 [t,y,x] ,然后又得到頻繁項集 [t,y,x,z] 。 然后得到構造 tyxz-條件FP樹 的頭部鏈表是空的,終止遍歷。我們得到的頻繁項集有 [t]→[t,y]→[t,y,z]→[t,y,z,x][t]\to [t,y]\to [t,y,z]\to [t,y,z,x][t][t,y][t,y,z][t,y,z,x],這只是一小部分。

    • 條件模式基:頭部鏈表中的某一點的前綴路徑組合就是條件模式基,條件模式基的值取決于末尾節點的值。
    • 條件FP樹:以條件模式基為數據集構造的FP樹叫做條件FP樹。

    FP-growth 代碼講解

    完整代碼地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/12.FrequentPattemTree/fpGrowth.py

    main 方法大致步驟:

    if __name__ == "__main__":simpDat = loadSimpDat() #加載數據集。initSet = createInitSet(simpDat) #對數據集進行整理,相同集合進行合并。myFPtree, myHeaderTab = createTree(initSet, 3)#創建FP樹。freqItemList = []mineTree(myFPtree, myHeaderTab, 3, set([]), freqItemList) #遞歸的從FP樹中挖掘出頻繁項集。print freqItemList

    大家看懂原理,再仔細跟蹤一下代碼。基本就沒有問題了。

    參考文章:https://github.com/apachecn/AiLearning/blob/dev/blog/ml/12.使用FP-growth算法來高效發現頻繁項集.md

    總結

    以上是生活随笔為你收集整理的【机器学习】数据挖掘算法——关联规则(三),FP-growth算法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。