機器學習A-Z~先驗演算法Apriori
本文將會講述關聯規則學習中的一個基本演算法,叫做先驗演算法。所謂先驗演算法,就是找出不同事件之間的聯絡。比如一個人在超市買了產品A,他可能會買貨物B。這裡我們看一個例子。
這裡有七筆交易,那麼根據這些資料我們可以得出一些猜測,當有貨物A時可能有貨物B。比如有漢堡的時候可能有薯條,如果有蔬菜可能就有水果等等。當我們的商店越來越大,交易記錄越來越多,那麼通過人為觀察來看出這些商品之間的聯絡就很難了,這時就需要用到先驗演算法。
概念
先驗演算法當中有三個核心概念,support(支援度), confidence(信心水準), lift(提升度)。
先來看看支援度,比如交易的例子,對於一個商品I來說,那麼就是所有包含商品I的交易數目除以總的交易數目。
support(I) = \frac{transactions\quad containing\quad I}{transactions}
第二個概念,信心水準,這裡I1表示商品1,I2表示商品2,那麼信心水準就是同時包含商品1和2的交易除以包含商品1的交易記錄個數。
confidence(I_1 -> I_2) = \frac{transactions\quad containing\quad I_1\quad and\quad I_2}{transactions \quad containing \quad I_1}
第三個概念,提升度,這個和支援度和信心水準有關,就是configdence/support。當這個提升度大於1時,我們可以認為商品 I_1 對 I_2 是有提升的。
lift(I_1 -> I_2) = \frac{confidence(I_1->I_2)}{support(I_2)}
那麼現在做個總結,這個先驗演算法主要可以分為四步:
- 設定一個最低的support和confidence
- 選擇所有support比剛剛設定的要大的商品
- 根據剛剛已經選擇的商品,選擇所有比剛剛定義的最小confidence要高的所有規則的集合
- 把剛剛的規則從大到小排序,選出提升度最高的幾個。
程式碼實現
這次程式碼實現我們使用一家商店如何使用先驗演算法來提高銷量的例子。這裡有這家商店最近的所有交易,每個交易中分別賣出了不同種類的商品。
這次的程式碼使用了一個額外的包,因此需要大家自己去看這個包裡的程式碼,這裡只貼出如何使用這個包進行先驗演算法的使用。
from apyori import apriori import pandas as pd dataset = pd.read_csv('Market_Basket_Optimisation.csv', header=None) transactions = [] for i in range(0, 7501): transactions.append([str(dataset.values[i, j]) for j in range(0, 20)]) # Training Apriori on the dataset rules = apriori(transactions, min_support=0.003, min_confidence=0.2, min_lift=3, min_length=2) # Visualising the results results = list(rules) myResults = [list(x) for x in results]
這裡的apyori包可以去我的 github 檢視這部分程式碼。以上,就是先驗演算法的相關基礎知識。