使用Apriori演算法進行關聯分析
Apriori原理
如果某個項集是頻繁的,那麼它的所有子集也是頻繁的。即如果{0,1}是頻繁的,則{0},{1}也是頻繁的。
這個原理直觀上並沒有什麼協助,但如果反過來看,就有用了。
如果某個項集是非頻繁的,那麼它的所有超集也是非頻繁的。即如果{0}也是非頻繁的,則包含{0}的所有超集如{0,1}也是非頻繁的。 重要定義
# 測試項集: [['豆奶','萵苣'], ['萵苣','尿布','葡萄酒','甜菜'], ['豆奶','尿布','葡萄酒','橙汁'], ['萵苣','豆奶','尿布','葡萄酒'], ['萵苣','豆奶','尿布','橙汁']]
支援度(support)
一個項集的支援度,被定為為資料集中包含該項集的記錄所佔的比例,例如上面的測試資料,{豆奶}的支援度為4/5,而在5條記錄中,有3條包含{豆奶,尿布},因此{豆奶,尿布}的支援度為3/5。支援度是針對項集來說的,因此可以定義一個最小支援度,而只保留滿足最小支援度的項集。 可信度或信賴度(confidence)
信賴度是針對一條諸如{尿布}→{葡萄酒}的關聯規則來定義的。這條規則的可信度被定義為“支援度({尿布,葡萄酒})/支援度({尿布})”。上例中,由於{尿布,葡萄酒}的支援度為3/5,{尿布}的支援度為4/5,所以“尿布→葡萄酒”的可信度為3/4=0.75。 python實現
安裝對應庫
開啟命令列視窗,輸入
pip install apyori
若失敗,可使用其他方法。
測試安裝:
from apyori import apriori
匯入成功,則安裝成功,否則失敗。
API
from apyori import aprioridata = [['豆奶','萵苣'], ['萵苣','尿布','葡萄酒','甜菜'], ['豆奶','尿布','葡萄酒','橙汁'], ['萵苣','豆奶','尿布','葡萄酒'], ['萵苣','豆奶','尿布','橙汁']]result = list(apriori(transactions=data)# apriori其他參數說明:min_support -- The minimum support of relations (float).最小支援度,可用來篩選項集min_confidence -- The minimum confidence of relations (float).最小可信度,可用來篩選項集min_lift -- The minimum lift of relations (float).未知max_length -- The maximum length of the relation (integer).未知
上面得到的result是一個列表,由於沒找到相關的文檔,下面是我所能理解的元素的屬性介紹。
result裡每一個項集的屬性介紹 items – 項集,frozenset對象,可迭代取出子集。 support – 支援度,float類型。 confidence – 信賴度或可信度, float類型。 ordered_statistics – 存在的關聯規則
可迭代,迭代後,其元素的屬性:
items_base – 關聯規則中的分母項集 confidence – 上面的分母規則所對應的關聯規則的可信度 結尾
好了,簡單的筆記就寫到這。雖然暫時沒找到這個庫對應的文檔,但可以通過pycharm預覽每個項集的屬性。雖然不能直接得出關聯規則排序,但不需要自己寫演算法來計算支援度,比自己寫計算過程好多了。 注意
Apriori演算法不適用於非重複項集數元素較多的案例,如果某商店的銷售商品種類是N,則其所有子集的個數為2^N - 1,其運算量之大,可想而知,建議分析的商品種類<10種。