1. 程式人生 > >python關聯分析 __機器學習之FP-growth頻繁項集演算法

python關聯分析 __機器學習之FP-growth頻繁項集演算法

FP-growth演算法

專案背景/目的

對於廣告投放而言,好的關聯會一定程度上提高使用者的點選以及後續的諮詢成單

對於產品而言,關聯分析也是提高產品轉化的重要手段,也是大多商家都在做的事情,尤其是電商平臺

曾經我用SPSS Modeler做過Apriori關聯分析模型,也能滿足需求,但是效果自然是不及python了,這裡分享一下操作流程
在這裡插入圖片描述
還有一週就雙十一了,那不妨去看看產品關聯背後的原理

專案原理

步驟一 資料處理

1.遍歷所有的資料集合,計算所有項的支援度(次數)
2.丟棄非頻繁項(次數小於2)
3.再對所有出現次數降序排列
4.對所有的資料集按照支援度排序,並丟棄非頻繁項
~ 到這一步整個資料就處理好了,後面就是生成FP tree以及節點連結串列
資料處理

步驟二 FP樹建立

1.讀取每個集合插入FP樹中,同時用一個頭部連結串列資料結構維護不同集合的相同項,這裡講根節點設定為null,就是指根節點不包括任何的項,是為了任何一個數據集進來都被視為空項開始的
2.每新增一個計數加1,沒有重合則新增一個節點
具體流程

步驟三 從FP數中挖掘頻繁項集

1.對頭部連結串列進行降序排序
2.對頭部連結串列節點從小到大遍歷,得到條件模式基,同時獲得一個頻繁項集
也就是說對項頭表頻率最小的開始,找對其對於的葉子節點並計數,也就是其對應的條件模式基
事例1

這裡的葉子節點計數為 {A:2,C:2,E:1,G:1,D:1},刪除閾值小於2的 故只有A,C

事例2

程式碼解釋

FP樹的節點結構

class treeNode:
    def __init__(self, nameValue, numOccur, parentNode):
        self.name = nameValue # 節點名稱
        self.count = numOccur # 節點出現次數
        self.nodeLink = None # 不同項集的相同項通過nodeLink連線在一起
        self.parent = parentNode # 指向父節點
        self.children = {} # 儲存葉子節點
def inc(self, numOccur): """inc(對count變數增加給定值) """ self.count += numOccur def disp(self, ind=1): """disp(用於將樹以文字形式顯示) """ print(' '*ind, self.name, ' ', self.count) for child in self.children.values(): child.disp(ind+1) def __lt__(self, other): return self.count < other.count

讀取資料並呼叫createTree方法,設定頻繁項集(也就是出現次數這裡是100000)

    parsedDat = [line.split() for line in open('kosarak.dat').readlines()]
    initSet = createInitSet(parsedDat)
    myFPtree, myHeaderTab = createTree(initSet, 100000)

呼叫mineTree方法

    myFreList = []
    mineTree(myFPtree, myHeaderTab, 100000, set([]), myFreList)
    print(myFreList)

由於程式碼量較大就不一一copy上了

結論

最終輸出如下結果,eg:瀏覽(購買)過1的同時也瀏覽(購買)了6,幾百萬的資料量執行也是很快的
在這裡插入圖片描述

❤❤❤
最後感謝AI Learning團隊,網址附上(http://www.apachecn.org)有興趣的小夥伴可以去看看,很nice的一個組織