參考:
很多人都喜歡用「啤酒跟尿布」這個例子來比喻機器學習,
主要就是想說明apriori在挖掘物件關聯的重要作用,這個演算法很簡單,沒有涉及複雜的數學知識,一點邏輯而已,還有改進的apriori演算法,有時間我也會實現一下
簡單實現了一下apriori,直接上python**和結果
#-*- coding:utf-8 -*-
'''created on aug 25, 2013
@author: blacklaw
@ref:
'''# trade data use goods id
data = [[1, 2, 5],
[2, 4],
[2, 3],
[1, 2, 4],
[1, 3],
[2, 3],
[1, 3],
[1, 2, 3, 5],
[1, 2, 3]
]def get_init_cand_list(data):
items =
for grade in data:
for good in grade:
tu = tuple([good])
if not tu in items:
return sorted(items)
def get_frequence_dict(data, cand_list):
# tran cand_list to dict with candiate cont
frequence_dict = {}
for cand in cand_list:
frequence_dict[cand] = 0
for grade in data:
if len(set(cand) - set(grade)) == 0:
frequence_dict[cand] += 1
return frequence_dict
def del_unfreque_item(freq_dict):
# unfrequece item's count is 1
for item, count in freq_dict.items():
if count <= 1:# count of 0 or 1 delete
freq_dict.pop(item)
def candiate_combine(freq_dict):
# upper goods count of frequence like (1,2) | (2,3) = (1,2,3)
candiate_list = freq_dict.keys()
ret_list =
for i, candiate in enumerate(candiate_list):
for union in candiate_list[i+1:]:
return list(set(ret_list))
if __name__ == "__main__":
cand_list = get_init_cand_list(data)
time = 0
while(true):
time += 1
freq_dict = get_frequence_dict(data, cand_list)
del_unfreque_item(freq_dict)
print '%d good(s) frequently together:' % time, freq_dict
cand_list = candiate_combine(freq_dict)
if len(cand_list) == 0:
break
結果:
1 good(s) frequently together:
2 good(s) frequently together:
3 good(s) frequently together:
4 good(s) frequently together: {}
機器學習 Apriori演算法
apriori演算法包含兩部分內容 1,發現頻繁項集 2,挖掘關聯規則。通俗地解釋一下,就是這個意思 1.發現哪些專案常常同時出現 2.挖掘這些常常出現的專案是否存在 如果a那麼b 的關係。舉個例子 購物訂單常常會出現這樣一種情況 那就是某幾種物品常常一起買。比如鍋和鏟子 手機和手機殼等就會常常出現...
機器學習演算法 之Apriori
apriori演算法不同於以前接觸過的機器學習演算法,這種演算法用於在資料集中尋找有趣的關係。這些關係可以有兩種形式 頻繁項集或者關聯規則。關於演算法的詳細介紹參見 def apriori dataset,minsupport 0.5 c1 createc1 dataset d map set,da...
機器學習演算法(九) Apriori演算法
apriori演算法是一種關聯分析方法,用於發現隱藏在大型資料集中有意義的聯絡。所發現的聯絡可以使用關聯規則和頻繁項集來表示。令i 是購物籃資料所有項的集合,而t 是所有事務的集合。每個事務ti 包含的項集都是i的子集。在關聯分析中,包含0個或多個項的集合被稱為項集。如果乙個項集包含k個項,則稱它為...