Apriori(先驗)算法關聯規則學習的經典算法之一,用來尋找出數據集中頻繁出現的數據集合。若是看過之前的博客,是否是想到了這個跟數據挖掘入門系列教程(一)之親和性分析這篇博客很類似?Yes,的確很類似,只不過在這篇博客中,咱們會更加深刻的分析如何尋找可靠有效的親和性。並在下一篇博客中使用Apriori算法去分析電影中的親和性。這篇主要是介紹Apriori算法的流程。算法
這個在數據挖掘入門系列教程(一)之親和性分析這篇博客曾經提過,但在這裏再從新詳細的說一下。ide
何如判斷一個數據是不是頻繁?按照咱們的想法,確定是數據在數據集中出現次數的越多,則表明着這個數據出現的越頻繁。學習
值得注意的是:在這裏的數據能夠是一個數據,也能夠是多個數據 (項集)。ui
如下面這張圖爲例子,這張圖每一列表明商品是否被購買(1表明被購買,0表明否),每一行表明一次交易記錄:spa
經常使用的評估標準由支持度、置信度、和提高度三個:code
支持度就是數據在數據集中出現的次數(也能夠是次數佔總數據集的比重),或者說其在數據集中出現的機率:htm
下面的公式以所佔比例來講明:
\[ \begin{split} & 若是是一個數據X,則其支持度爲:\\ & support(X) = P(X) = \frac{num(X)}{num(ALL)} \\ & 若是數據是一個數據項集(X,Y),則支持度爲:\\ & support(X,Y) = P(X,Y) = \frac{num(XY)}{num(ALL)}\\ & 若是數據是一個數據項集(X,Y,Z),則支持度爲:\\ & support(X,Y,Z) = P(X,Y,Z) = \frac{num(XYZ)}{num(ALL)}\\ & (X,Y,Z表明的是X,Y,Z同時出現的次數) \end{split} \]
以上面的交易爲例:blog
咱們來求 (黃油,蘋果) 的支持度:教程
(黃油,蘋果) 在第0,2,3
中經過出現了,一共是5條數據,所以\(support(黃油,蘋果) = \frac{3}{5} = 0.6\)
通常來講,支持度高的不必定數據頻繁,可是數據頻繁的必定支持度高
置信度表明的規則應驗的準確性,也就是一個數據出現後,另一個數據出現的機率,也就是條件機率。(以購買爲例,就是已經購買Y的條件下,購買X的機率)公式以下:
\[ \begin{split} & 設分析的數據是X,Y,則X對Y的置信度爲:\\ & confidence(X \Leftarrow Y) = P(X|Y) = \frac{P(XY)}{P(Y)} \\ & 設分析的數據是X,Y,Z,則X對Y和Z的置信度爲:\\ & confidence(X \Leftarrow YZ) = P(X|YZ) = \frac{P(XYZ)}{P(YZ)} \\ \end{split} \]
仍是以 (黃油,蘋果) 爲例子,計算黃油對蘋果的置信度:\(confidence(黃油\Leftarrow蘋果) = \frac{3}{4} = 0.75\)。
可是置信度有一個缺點,那就是它可能會扭曲關聯的重要性。由於它只反應了Y的受歡迎的程度。若是X的受歡迎程度也很高的話,那麼confidence也會很大。下面是數據挖掘蔣少華老師的一段爲何咱們須要使用提高度
的話:
提高度表示在含有Y的條件下,同時含有X的機率,同時考慮到X的機率,公式以下:
\[ \begin{equation} \begin{aligned} Lift(X \Leftarrow Y) &= \frac{support(X,Y)}{support(X) \times support(Y)} \ \ &= \frac{P(X,Y)}{P(X) \times P(Y)}\\ & = \frac{P(X|Y)}{P(X)}\\ & = \frac{confidenc(X\Leftarrow Y)}{P(X)} \end{aligned} \end{equation} \]
在提高度中,若是\(Lift(X \Leftarrow Y) = 1\)則表示X,Y之間相互獨立,沒有關聯(由於\(P(X|Y) = P(X)\)),若是\(Lift(X \Leftarrow Y) > 1\)則表示\(X \Leftarrow Y\)則表示\(X \Leftarrow Y\)是有效的強關聯(在購買Y的狀況下極可能購買X);若是\(Lift(X \Leftarrow Y) < 1\)則表示\(X \Leftarrow Y\)則表示\(X \Leftarrow Y\)是無效的強關聯。
通常來講,咱們如何判斷一個數據集中數據的頻繁程度時使用提高度來作的。
說完評判標準,接下來咱們說一下算法的流程(來自參考1)。
Apriori算法的目標是找到最大的K項頻繁集。這裏有兩層意思,首先,咱們要找到符合支持度標準(置信度or提高度)的頻繁集。可是這樣的頻繁集可能有不少。第二層意思就是咱們要找到最大個數的頻繁集。好比咱們找到符合支持度的頻繁集AB和ABE,那麼咱們會拋棄AB,只保留ABE,由於AB是2項頻繁集,而ABE是3項頻繁集。
算法的流程圖以下(圖來自《Python數據挖掘入門與實踐》):
下面是一個具體的例子來介紹(圖源不知道來自哪裏,不少博客都在用),這個例子是以support做爲評判標準,在圖中\(C_n\)表明的是備選項集,L表明的是被剪掉後的選項集,\(Min\ support = 50\%\)表明的是最小符合標準的支持度(大於它則表示頻繁)。
這個例子的圖像仍是滿生動的,很容易看的懂。下面就簡單的解釋一下:
首先咱們有數據集D,而後生成數據項\(K =1\)的備選項集\(C_1\),而後去除\(support_n < Min\ support\)的數據項,獲得\(L_1\),而後又生成數據項\(K =2\)的備選項集\(C_2\),而後又去除\(support_n < Min\ support\)的數據項。進行遞歸,直到沒法發現新的頻繁項。
總的來講,Apriori算法不是很難,算法的流程也很簡單,而它的核心在於如何構建一個有效的評判標準,support?confidence?Lift?or others?可是它也有一些缺點:每次遞歸都須要產生大量的備選項集,若是數據集很大的話,怎麼辦?重複的掃描數據集……
在下一篇博客中,我將介紹如何使用Apriori算法對電影的數據集進行分析,而後找出之間的相關關係。
- Apriori算法原理總結
- Association Rules and the Apriori Algorithm: A Tutorial
- 《Python數據挖掘入門與實踐》
- 數據挖掘蔣少華老師