https://www.cnblogs.com/molieren/articles/10679277.html
https://www.cnblogs.com/bigmonkey/p/7405555.html
https://www.cnblogs.com/bigmonkey/p/7449761.html
from efficient_apriori import apriori
# 設置數據集
data = [('牛奶','麪包','尿布'),
('可樂','麪包', '尿布', '啤酒'),
('牛奶','尿布', '啤酒', '雞蛋'),
('麪包', '牛奶', '尿布', '啤酒'),
('麪包', '牛奶', '尿布', '可樂')]
itemsets, rules = apriori(data, min_support=0.5, min_confidence=1) #最小支持度,最小置信度
min_support=0.5表示頻繁項集出現的次數佔一半或者以上,這裏有5次購物,則至少出現3次纔可以。
min_confidence=1表示最小置信度爲1,其實是買了前件,就一定要買後件。
itemsets # 頻繁項集
{1: {('啤酒',): 3, ('尿布',): 5, ('牛奶',): 4, ('麪包',): 4},
2: {('啤酒', '尿布'): 3, ('尿布', '牛奶'): 4, ('尿布', '麪包'): 4, ('牛奶', '麪包'): 3},
3: {('尿布', '牛奶', '麪包'): 3}}
前面1,2,3代表的是頻繁項集的維數,裏面的3,5,4,4等是支持度(大於等於3),即出現的次數。
rules # 頻繁規則
[{牛奶} -> {尿布}, {麪包} -> {尿布}, {啤酒} -> {尿布}, {牛奶, 麪包} -> {尿布}]
買了牛奶一定會買尿布,買了啤酒一定會買尿布等等,但買了尿布不一定會買啤酒。
data 是個List類型,其中每個值都可以是一個集合。實際上也可以把 data 列表中的每個值由tuple設置爲 List 類型,兩者的運行結果是一樣的。
efficient-apriori 工具包把每一條數據集裏的項式都放到了一個集合中進行運算,並沒有考慮它們之間的先後順序。因爲實際情況下,同一個購物籃中的物品也不需要考慮購買的先後順序。而其他的 Apriori 算法可能會因爲考慮了先後順序,出現計算頻繁項集結果不對的情況。所以這裏採用的是 efficient-apriori 這個工具包。