python關聯分析__機器學習之FP-growth頻繁項集演算法
阿新 • • 發佈:2018-12-19
FP-growth演算法
專案背景/目的
對於廣告投放而言,好的關聯會一定程度上提高使用者的點選以及後續的諮詢成單
對於產品而言,關聯分析也是提高產品轉化的重要手段,也是大多商家都在做的事情,尤其是電商平臺
曾經我用SPSS Modeler做過Apriori關聯分析模型,也能滿足需求,但是效果自然是不及python了,這裡分享一下操作流程 還有一週就雙十一了,那不妨去看看產品關聯背後的原理
專案原理
步驟一 資料處理
1.遍歷所有的資料集合,計算所有項的支援度(次數) 2.丟棄非頻繁項(次數小於2) 3.再對所有出現次數降序排列 4.對所有的資料集按照支援度排序,並丟棄非頻繁項 ~ 到這一步整個資料就處理好了,後面就是生成FP tree以及節點連結串列
步驟二 FP樹建立
1.讀取每個集合插入FP樹中,同時用一個頭部連結串列資料結構維護不同集合的相同項,這裡講根節點設定為null,就是指根節點不包括任何的項,是為了任何一個數據集進來都被視為空項開始的 2.每新增一個計數加1,沒有重合則新增一個節點
步驟三 從FP數中挖掘頻繁項集
1.對頭部連結串列進行降序排序 2.對頭部連結串列節點從小到大遍歷,得到條件模式基,同時獲得一個頻繁項集 也就是說對項頭表頻率最小的開始,找對其對於的葉子節點並計數,也就是其對應的條件模式基
這裡的葉子節點計數為 {A:2,C:2,E:1,G:1,D:1},刪除閾值小於2的 故只有A,C
程式碼解釋
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
[{'1'}, {'1', '6'}, {'11'}, {'3', '11'}, {'3', '11', '6'}, {'11', '6'}, {'3'}, {'3', '6'}, {'6'}]
❤❤❤ 最後感謝AI Learning團隊,網址附上(http://www.apachecn.org)有興趣的小夥伴可以去看看,很nice的一個組織