機器學習之FP-growth頻繁項集算法

FP-growth算法
項目背景/目的
對於廣告投放而言,好的關聯會一定程度上提高用戶的點擊以及後續的諮詢成單

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

曾經我用SPSS Modeler做過Apriori關聯分析模型,也能滿足需求,但是效果自然是不及python了,這裏分享一下操作流程機器學習之FP-growth頻繁項集算法

還有一週就雙十一了,那不妨去看看產品關聯背後的原理

項目原理
步驟一 數據處理
1.遍歷所有的數據集合,計算所有項的支持度(次數)
2.丟棄非頻繁項(次數小於2)
3.再對所有出現次數降序排列
4.對所有的數據集按照支持度排序,並丟棄非頻繁項
~ 到這一步整個數據就處理好了,後面就是生成FP tree以及節點鏈表
機器學習之FP-growth頻繁項集算法

步驟二 FP樹創建
1.讀取每個集合插入FP樹中,同時用一個頭部鏈表數據結構維護不同集合的相同項,這裏講根節點設置爲null,就是指根節點不包括任何的項,是爲了任何一個數據集進來都被視爲空項開始的
2.每新增一個計數加1,沒有重合則新增一個節點
機器學習之FP-growth頻繁項集算法

步驟三 從FP數中挖掘頻繁項集
1.對頭部鏈表進行降序排序
2.對頭部鏈表節點從小到大遍歷,得到條件模式基,同時獲得一個頻繁項集
也就是說對項頭表頻率最小的開始,找對其對於的葉子節點並計數,也就是其對應的條件模式基
機器學習之FP-growth頻繁項集算法

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

機器學習之FP-growth頻繁項集算法
代碼解釋
FP樹的節點結構

class treeNode:
    def __init__(self, nameValue, numOccur, parentNode):
        self.name = nameValue # 節點名稱
        self.count = numOccur # 節點出現次數
        self.nodeLink = None # 不同項集的相同項通過nodeLink連接在一起
        self.parent = parentNode # 指向父節點
        self.children = {} # 存儲葉子節點
    如果需要了解更多機器學習相關內容可以加羣:4 2 5 85 19 55獲取免費資料
    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)
 如果需要了解更多機器學習相關內容可以加羣:4 2 5 85 19 55獲取免費資料

調用mineTree方法

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

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

結論
最終輸出如下結果,eg:瀏覽(購買)過1的同時也瀏覽(購買)了6,幾百萬的數據量運行也是很快的
機器學習之FP-growth頻繁項集算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章