機器學習實戰 Apriori演算法進行關聯分析

2022-07-24 02:06:09 字數 3853 閱讀 9321

商場的銷售過程,涉及很多機器學習的應用,商品的陳列,購物卷的提供,使用者忠誠度等等,通過對這些大量資料的分析,可以幫組商店了解使用者的購物行為,進而對商品的定價、市場**、存貨管理等進行決策幫組。從大規模資料集中尋找物品間的隱含關係被稱作關聯分析(association analysis)或關聯學習(association rule learning).

關聯分析也可用於**流量分析以及醫藥行業

關聯分析:在大規模資料集中尋找有趣關係的任務。   

有趣關係:

頻繁項集:經常出現在一起的物品集合

關聯規則:暗示兩種物品之間可能存在很強的關係。

例子 分析雜貨店交易清單

商店交易清單1-1

交易編碼商品1

豆奶,萵苣

2萵苣,尿布,葡萄酒,甜菜

3豆奶,尿布,葡萄酒,橙汁

4萵苣,豆奶,尿布,葡萄酒

5萵苣,豆奶,尿布,橙汁

由頻繁項集的定義:經常出現在一起的物品集合,集合是乙個頻繁項集。可以從表中看出當使用者購買了尿布後,購買葡萄酒的機率很大,即找到了尿布---》葡萄酒的關聯規則。

如何尋找頻繁項集----根據支援度和可信度(或置信度)

支援度:資料集中包含該項集記錄所佔的比例,用於量化頻繁項集。事件a與事件b同時出現的概率:p(a∩b).

p(a∩b)=ab同時出現的次數/a出現的次數     支援度越高,事件越頻繁。

從表1-1中可以看出豆奶的支援度為4/5.5條交易中,包含的有3條,所以的支援度為3/5

可信度(置信度):事件a發生時,事件b發生的概率。

p(b|a)=p(a∩b)/p(a)=support(ab)/support(a)

比如,--->,這條規則的可信度被定義為:支援度(/支援度)。從表中可以看出的支援度3/5,的支援度4/5,所以--->葡萄酒的置信度:(3/5)/(4/5)=3/4

一雜貨店有四種商品 0,1,2,3.這些商品的組合可能有一種,二種,三種,四種。我們的關注點:使用者購買一種或者多種商品,不關心具體買的商品的數量。

集合中所有可能的項集組合如下圖1-1:

圖1-1

四種商品要遍歷15次,隨著物品數目的增加遍歷次數會急劇增加。對於包含n種商品的資料集一共有2n-1種項集組合。

apriori原理

如果乙個集合是頻繁子集,則它的所有子集都是頻繁項集。

如果乙個集合不是頻繁項集,則它的所有超集都不是頻繁項集。

根據apriori原理,假設集合是非頻繁項集,則,,也是非頻繁的,它們的支援度就不需要計算了。

apriori演算法兩個輸入引數:資料集和最小支援度。

該演算法首先生成所有單個物品的頻繁項集列表,接著掃瞄交易記錄檢視哪些項集滿足最小支援度要求,不滿足的被踢掉;對剩下的集合進行組合生成包含兩個元素的項集,重新掃瞄交易記錄,去掉不滿足最小支援度的項集。重複,直到所有項集都被去掉。

生成候選項集

1

import

numpy as np23

4#載入資料

5def

loaddataset():

6return [[1,3,4],[2,3,5],[1,2,3,5],[2,5]]78

#構建c1:大小為1的所有候選項集的集合

9def

createc1(dataset):

10 c1=#

空列表11

for transaction in

dataset:

12for item in

transaction:

13if

not [item] in

c1:只新增包含該物品項的乙個列表 為每個物品構建乙個集合15#

print([item],"item")

16c1.sort()

17print

(len(c1))

18return map(frozenset,c1) #

對c1中每個項構建乙個不變集合

1920

21def scand(data,ck,minsupport): #

資料集,候選項集列表,感興趣項集的最小支援度

22 d =map(set, data)23#

print(list(ck))

24 sscnt={} #

空字典25

#for tid in d:#遍歷資料集的所有交易記錄26#

#print(tid,"------tid")27#

for can in ck:#遍歷c1中的所有候選集28#

#print(can,"-----can")29#

#if can.issubset(tid):#c1中的集合是記錄的一部分,增加字典中對應的計數值30#

if tid.issuperset(can):31#

#if not sscnt.keys():sscnt[can]=1 #字典的鍵就是集合32#

if can in sscnt.keys():scand[can]+=133#

else:sscnt[can]=1

3435

for tid in

d:36

#print(tid, "------tid")

37for can in

ck:38

#print(can, "-----can")

39if can <=tid:40#

if tid.issuperset(can):

41if can in

sscnt.keys():

42 sscnt[can]+=1

43else

:44 sscnt[can]=1

45 numitem=len(list(data))46#

print(list(data))47#

print("numitem:",numitem)

48 retlist=#

空列表,用於包含最小支援度要求的集合

49 supportdata={}#

空字典50

for key in sscnt:#

遍歷字典中的每個元素並計算支援度

51 suport=sscnt[key]/numitem#

計算所有項集的支援度s52#

print(suport,"support",key)

53if suport>=minsupport:#

滿足支援度要求,則將字典元素新增到retlist

54 retlist.insert(0,key)#

在列表的首部插入任意新的集合

55 supportdata[key]=suport56#

print("relist:",retlist)

57return retlist,supportdata#

返回頻繁項集的支援度

頻繁項集:

對應頻繁項集的支援度:

機器學習實戰 apriori

前面主要學習了機器學習的兩大塊 分類,回歸,接下來的兩節進入到頻繁項集和關聯規則的分析。關聯分析中最著名的例子當屬啤酒和尿布了。為了定義上述的頻繁和關聯我們引入兩個定義 1 支援度 資料集中包含該集項的記錄所佔的比例 2 置信度 對於關聯規則p m,該規則的置信度為 support p u m su...

機器學習 演算法 Apriori

參考 很多人都喜歡用 啤酒跟尿布 這個例子來比喻機器學習,主要就是想說明apriori在挖掘物件關聯的重要作用,這個演算法很簡單,沒有涉及複雜的數學知識,一點邏輯而已,還有改進的apriori演算法,有時間我也會實現一下 簡單實現了一下apriori,直接上python 和結果 coding utf...

機器學習 Apriori演算法

apriori演算法包含兩部分內容 1,發現頻繁項集 2,挖掘關聯規則。通俗地解釋一下,就是這個意思 1.發現哪些專案常常同時出現 2.挖掘這些常常出現的專案是否存在 如果a那麼b 的關係。舉個例子 購物訂單常常會出現這樣一種情況 那就是某幾種物品常常一起買。比如鍋和鏟子 手機和手機殼等就會常常出現...