一、前言
在學習The Apriori algorithm算法時,參考了多篇博客和一篇論文,儘管這些都是很優秀的文章,但是並沒有一篇文章詳解了算法的整個流程,故整理多篇文章,並加入自己的一些註解,有了下面的文章。大部分應該是copy各篇博客和翻譯了論文的重要知識。
關聯規則的目的在於在一個數據集中找出項之間的關係,也稱之爲購物藍分析 (market basket analysis)。例如,購買鞋的顧客,有10%的可能也會買襪子,60%的買麪包的顧客,也會買牛奶。這其中最有名的例子就是"尿布和啤酒"的故事了。
二、重要概念
首先我們來看,什麼是規則?規則形如"如果…那麼…(If…Then…)",前者爲條件,後者爲結果。例如一個顧客,如果買了可樂,那麼他也會購買果汁。
如何來度量一個規則是否夠好?有兩個量,置信度(Confidence)和支持度(Support)。假設有如下表的購買記錄。
顧客 |
項目 |
1 |
orange juice, coke |
2 |
milk, orange juice, window cleaner |
3 |
orange juice, detergent |
4 |
orange juice, detergent, coke |
5 |
window cleaner |
將上表整理一下,得到如下的一個2維表
|
Orange |
Win Cl |
Milk |
Coke |
Detergent |
Orange |
4 |
1 |
1 |
2 |
2 |
WinCl |
1 |
2 |
1 |
0 |
0 |
Milk |
1 |
1 |
1 |
0 |
0 |
Coke |
2 |
0 |
0 |
2 |
1 |
Detergent |
1 |
0 |
0 |
0 |
2 |
上表中橫欄和縱欄的數字表示同時購買這兩種商品的交易條數。如購買有Orange的交易數爲4,而同時購買Orange和Coke的交易數爲2。
置信度表示了這條規則有多大程度上值得可信。設條件的項的集合爲A,結果的集合爲B。置信度計算在A中,同時也含有B的概率。即Confidence(A==>B)=P(B|A)。例 如計算"如果Orange則Coke"的置信度。由於在含有Orange的4條交易中,僅有2條交易含有Coke.其置信度爲0.5。
支持度計算在所有的交易集中,既有A又有B的概率。例如在5條記錄中,既有Orange又有Coke的記錄有2條。則此條規則的支持度爲2/5=0.4。現在這條規則可表述爲,如果一個顧客購買了Orange,則有50%的可能購買Coke。而這樣的情況(即買了Orange會再買Coke)會有40%的可能發生。
三、算法的原理和過程
首先找出所有的頻集,這些項集出現的頻繁性至少和預定義的最小支持度一 樣。然後由頻集產生強關聯規則,這些規則必須滿足最小支持度和最小可信度。然後使用第1步找到的頻集產生期望的規則,產生只包含集合的項的所有規則,其中 每一條規則的右部只有一項。
接下來是如何生成頻繁集。
最出名的關聯規則挖掘算法是Apriori算法,它主要利用了向下封閉屬性:如果一個項集是頻繁項目集,那麼它的非空子集必定是頻繁項目集。即頻繁集的子集也一定是頻繁集。比如,如果{A,B,C}是一個3項的頻繁集,則其子集{A,B},{B,C},{A,C}也一定是2項的頻繁集。它先生成1-頻繁項目集,再利用1-頻繁項目集生成2-頻繁項目集。。。然後根據2-頻繁項目集生成3-頻繁項目集。。。依次類推,直至生成所有的頻繁項目集,然後從頻繁項目集中找出符合條件的關聯規則。
生成一個頻繁集的步驟分聯合和剪枝兩步。
1、聯合,僞代碼如下:
其中Lk-1爲頻繁集。合併只有一個元素不同的item,如(1,2,3)、(1,3,7)和(1、4、9),就會是(1,2,3)和(1,3,7)合併成(1,2,3,7),而不會其他的合併,因爲其他情況,兩元素有不只一個元素不同。
2、剪枝
合併後的集合,如果有子集不在原集合中,則把該合併集合刪除。例如:
有2-頻繁項目集
{1,2},{1,3},{1,4},{2,3},{2,4}
因爲{1,2},{1,3},{1,4}除了最後一個元素以外都相同,所以求{1,2},{1,3}的並集得到{1,2,3}, {1,2}和{1,4}的並集得到{1,2,4},{1,3}和{1,4}的並集得到{1,3,4}。但是由於{1,3,4}的子集{3,4}不在2-頻繁項目集中,所以需要把{1,3,4}剔除掉。
在生成了最大頻繁集後,如何生成強規則呢?
對於最大頻繁集L,找出L的所有的非空集合。對於每個子集合a,生成如下規則a=>(L-a),然後根據最小支持度和置信度篩選所有規則。
下面舉例說明Apiori算法的具體流程:
假如有項目集合I={1,2,3,4,5},有事務集T:
1,2,3
1,2,4
1,3,4
1,2,3,5
1,3,5
2,4,5
1,2,3,4
設定minsup=3/7,misconf=5/7。
首先:生成頻繁項目集:
1-頻繁項目集:{1},{2},{3},{4},{5}
生成2-頻繁項目集:
根據1-頻繁項目集生成所有的包含2個元素的項目集:任意取兩個只有最後一個元素不同的1-頻繁項目集,求其並集,由於每個1-頻繁項目集元素只有一個,所以生成的項目集如下:
{1,2},{1,3},{1,4},{1,5}
{2,3},{2,4},{2,5}
{3,4},{3,5}
{4,5}
計算它們的支持度,發現只有{1,2},{1,3},{1,4},{2,3},{2,4},{2,5}的支持度滿足要求,因此求得2-頻繁項目集:
{1,2},{1,3},{1,4},{2,3},{2,4}
生成3-頻繁項目集:
因爲{1,2},{1,3},{1,4}除了最後一個元素以外都相同,所以求{1,2},{1,3}的並集得到{1,2,3}, {1,2}和{1,4}的並集得到{1,2,4},{1,3}和{1,4}的並集得到{1,3,4}。但是由於{1,3,4}的子集{3,4}不在2-頻繁項目集中,所以需要把{1,3,4}剔除掉。然後再來計算{1,2,3}和{1,2,4}的支持度,發現{1,2,3}的支持度爲3/7 ,{1,2,4}的支持度爲2/7,所以需要把{1,2,4}剔除。同理可以對{2,3},{2,4}求並集得到{2,3,4} ,但是{2,3,4}的支持度不滿足要求,所以需要剔除掉。
因此得到3-頻繁項目集:{1,2,3}。
到此頻繁項目集生成過程結束。注意生成頻繁項目集的時候,頻繁項目集中的元素個數最大值爲事務集中事務中含有的最大元素個數,即若事務集中事務包含的最大元素個數爲k,那麼最多能生成k-頻繁項目集,這個原因很簡單,因爲事務集合中的所有事務都不包含(k+1)個元素,所以不可能存在(k+1)-頻繁項目集。在生成過程中,若得到的頻繁項目集個數小於2,生成過程也可以結束了。
現在需要生成強關聯規則:
這裏只說明3-頻繁項目集生成關聯規則的過程:
對於集合{1,2,3}
先生成1-後件的關聯規則:
(1,2)—>3, 置信度=3/4
(1,3)—>2, 置信度=3/5
(2,3)—>1 置信度=3/3
(1,3)—>2的置信度不滿足要求,所以剔除掉。因此得到1後件的集合{1},{3},然後再以{1,3}作爲後件
2—>1,3 置信度=3/5不滿足要求,所以對於3-頻繁項目集生成的強關聯規則爲:(1,2)—>3和(2,3)—>1。
四、參考文獻