商場的銷售過程,涉及很多機器學習的應用,商品的陳列,購物卷的提供,使用者忠誠度等等,通過對這些大量資料的分析,可以幫組商店了解使用者的購物行為,進而對商品的定價、市場**、存貨管理等進行決策幫組。從大規模資料集中尋找物品間的隱含關係被稱作關聯分析(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 的關係。舉個例子 購物訂單常常會出現這樣一種情況 那就是某幾種物品常常一起買。比如鍋和鏟子 手機和手機殼等就會常常出現...