關聯規則—頻繁項集Apriori算法


頻繁模式和對應的關聯或相關規則在一定程度上刻畫了屬性條件與類標號之間的有趣聯系,因此將關聯規則挖掘用於分類也會產生比較好的效果。
關聯規則就是在給定訓練項集上頻繁出現的項集與項集之間的一種緊密的聯系。其中“頻繁”是由人為設定的一個閾值即支持度 (support)來衡量,“緊密”也是由人為設定的一個關聯閾值即置信度(confidence)來衡量的。這兩種度量標准是頻繁項集挖掘中兩個至關重 要的因素,也是挖掘算法的關鍵所在。對項集支持度和規則置信度的計算是影響挖掘算法效率的決定性因素,也是對頻繁項集挖掘進行改進的入口點和研究熱點。
基於關聯規則的分類主要分為以下以個步驟:
1.  對訓練數據進行預處理(包括離散化、缺失值處理等) 
2.  關聯規則挖掘 
     2.1  頻繁項集挖掘 
     2.2  關聯規則生成 
3.  規則處理
4.  對測試集進行測試
二、頻繁項集挖掘
目前頻繁項集挖掘已經有很多比較成熟的算法,在網上也可以找到相關的優秀論文或源代碼。算法中最經典的莫過於Apriori算法,它可以算得上是頻 繁項集挖掘算法的鼻祖,后續很多的改進算法也是基於Apriori算法的。但是遺憾的是Apriori算法的性能實在不咋的,當當玩具玩玩還可以,但是即 使如此,該算法卻是頻繁項集挖掘必須要掌握的入門算法。
題外話:關健是要了解算法的思想,你可以不了解一個東西是怎樣具體實現的,但是一定得了解它是如何出來的。這樣遇到相關的問題,你可以有一個參考的 解決方法,或者在關鍵時刻可以跟別人忽悠忽悠。當然,了解思想的最佳途徑就是自己動手去實現實現了,哪怕實現得不咋樣,起碼思想掌握了,也是個不小的收 獲。
下面就要具體介紹如何利用Apriori算法進行頻繁項集挖掘了。

(1)相關概念
項集:“屬性-值”對的集合,一般情況下在實際操作中會省略屬性。 
候選項集:用來獲取頻繁項集的候選項集,候選項集中滿足支持度條件的項集保留,不滿足條件的舍棄。 
頻繁項集:在所有訓練元組中同時出現的次數超過人工定義的閾值的項集稱為頻繁項集。 
極大頻繁項集:不存在包含當前頻繁項集的頻繁超集,則當前頻繁項集就是極大頻繁項集。 
支持度:項集在所有訓練元組中同時出現的次數。 
置信度:形如A->B,置信度為60%表示60%的A出現的同時也出現B。 
k項集:項集中的每個項有k個“屬性-值”對的組合。 

(2)兩個定理
i:連接定理。若有兩個k-1項集,每個項集按照“屬性-值”(一般按值)的字母順序進行排序。如果兩個k-1項集的前k-2個項相同,而最后一 個項不同,則證明它們是可連接的,即這個k-1項集可以聯姻,即可連接生成k項集。使如有兩個3項集:{a, b, c}{a, b, d},這兩個3項集就是可連接的,它們可以連接生成4項集{a, b, c, d}。又如兩個3項集{a, b, c}{a, d, e},這兩個3項集顯示是不能連接生成3項集的。要記住,強扭的瓜是不甜的,也結不了果的。 
ii:頻繁子集定理。若一個項集的子集不是頻繁項集,則該項集肯定也不是頻繁項集。這個很好理解,舉一個例子,若存在3項集{a, b, c},如果它的2項子集{a, b}的支持度即同時出現的次數達不到閾值,則{a, b, c}同時出現的次數顯然也是達不到閾值的。因此,若存在一個項集的子集不是頻繁項集,那么該項集就應該被無情的舍棄。倘若你舍不得,那么這個項集就會無情 的影響你的效率以及處理器資源,所以在這時,你必須無情,斬立決! 

(3)Apriori算法流程
    1. 掃描數據庫,生成候選1項集和頻繁1項集。
    2. 從2項集開始循環,由頻繁k-1項集生成頻繁頻繁k項集。
           2.1  頻繁k-1項集生成2項子集,這里的2項指的生成的子集中有兩個k-1項集。使如有3個2項頻繁集{a, b}{b, c}{c, f},則它所有的2項子集為{{a, b}{b, c}}{{a, b}{e, f}}{{b, c}{c, f}}
        2.2  對由2.1生成的2項子集中的兩個項集根據上面所述的定理 i 進行連接,生成k項集。
        2.3  對k項集中的每個項集根據如上所述的定理 ii 進行計算,舍棄掉子集不是頻繁項集即不在頻繁k-1項集中的項集。
        2.4  掃描數據庫,計算2.3步中過濾后的k項集的支持度,舍棄掉支持度小於閾值的項集,生成頻繁k項集。
    3.  當當前生成的頻繁k項集中只有一個項集時循環結束。

      關聯規則(Association Rules)是反映一個事物與其他事物之間的相互依存性和關聯性,是數據挖掘的一個重要技術, 用於從大量數據中挖掘出有價值的數據項之間的相關關系。 其中關聯規則挖掘的最經典的例子就是沃爾瑪的啤酒與尿布的故事 ,通過對超市購物籃數據進行分析,即顧客放入購物籃中不同商品之間的關系來分析顧客的購物習慣,發現美國婦女們經常會叮囑丈夫下班后為孩子買尿布,30%-40%的丈夫同時會順便購買喜愛的啤酒,超市就把尿布和啤酒放在一起銷售增加銷售額。 
二.基本概念 
關聯規則挖掘是尋找給定數據集中項之間的有趣聯系。如下圖所示: 


 
其中,I={I1,I2,…Im}是m個不同項目的集合,集合中的元素稱為項目(Item)。項目的集合I稱為項目集合(Itemset),長度為k的項集成為k-項集。設任務相關的數據D是數據庫事務的集合,其中每個事務T是項的集合,使得 T ⊆ I 。每個事務有一個標識符TID;設A是一個項集,事務T包含A當且僅當 A⊆I ,則關聯規則形式為A=>B(其中 A ⊂ I , B ⊂ I ,並且 A ∩ B = ∅)。 
  
在關聯規則度量中有兩個重要的度量值:支持度和置信度 。對於關聯規則R:A=>B,則: 
1. 支持度(suppport ): 是交易集中同時包含A和B的交易數與所有交易數之比。 
Support(A=>B)=P(A∪B)=count(A∪B)/|D| 
2. 置信度(confidence ): 是包含A和B交易數與包含A的交易數之比。 
Confidence(A=>B)=P(B|A)=support(A∪B)/support(A) 


 
   
如上圖中數據庫D,包含4個事務,項集I={I1,I2,I3,I4,I5},分析關聯規則:I1=>I4,事務1、4包含I1,事務4同時包含I1和I4。 
支持度support=1/4=25%(1個事務同時包含I1和I4,共有4個事務)指 在所有交易記錄中有25%的交易記錄同時包含I1和I4項目 
置信度confidence=1/2=50%(1個事務同時包含I1和I4,2個事務包含I1)指 50%的顧客在購買I1時同時還會購買I4 
  
使用關聯規則對購物籃進行挖掘,通常采用兩個步驟進行: 下面將通超市購物的例子對關聯規則挖掘進行分析。 
a.找出所有頻繁項集(文章中我使用Apriori算法>=最小支持度的項集) 
b.由頻繁項集產生強關聯規則(>=最小支持度和最小置信度) 
三.舉例:Apriori算法挖掘頻繁項集 
Apriori算法是一種對有影響的挖掘布爾關聯規則頻繁項集的算法,通過算法的連接和剪枝即可挖掘頻繁項集。 補充頻繁項集相關知識: K-項集:指包含K個項的項集; 項集的出現頻率:指包含項集的事務數,簡稱為項集的頻率、支持度計數或計數; 頻繁項集:如果項集的出現頻率大於或等於最小支持度計數閾值,則稱它為頻繁項集,其中頻繁K-項集的集合通常記作L k 。 
下面直接通過例子描述該算法:如下圖所示(注意Items已經排好序),使用Apriori算法關聯規則挖掘數據集中的頻繁項集。(最小支持度技術為2) 
 

 
具體過程如下所示: 


 
具體分析結果: 
第一次掃描:對每個候選商品計數得C1,由於候選{D}支持度計數為1<最小支持度計數2,故刪除{D}得頻繁1-項集合L1; 
第二次掃描:由L1產生候選C2並對候選計數得C2,比較候選支持度計數與最小支持度計數2得頻繁2-項集合L2; 
第三次掃描:用Apriori算法對L2進行連接和剪枝產生候選3項集合C3的過程如下: 
1.連接: 
C3=L2  (連接)L2={{A,C},{B,C},{B,E},{C,E}}  {{A,C},{B,C},{B,E},{C,E}}={{A,B,C},{A,C,E},{B,C,E}} 
2.剪枝: 
{A,B,C}的2項子集{A,B},{A,C}和{B,C},其中{A,B}不是 2項子集L2,因此不是頻繁的,從C3中刪除; 
{A,C,E}的2項子集{A,C},{A,E}和{C,E},其中{A,E}不是2項子集L2,因此不是頻繁的,從C3中刪除; 
{B,C,E}的2項子集{B,C},{B,E}和{C,E},它的所有2項子集都是L2的元素,保留C3中. 
經過Apriori算法對L2連接和剪枝后產生候選3項集的集合為C3={B,C,E}. 在對該候選商品計數,由於等於最小支持度計數2,故得頻繁3-項集合L3,同時由於4-項集中僅1個,故C4為空集,算法終止。 
四.舉例:頻繁項集產生強關聯規則 
強關聯規則是指:如果規則R:X=>Y滿足support(X=>Y)>=supmin(最小支持度,它 用於衡量規則需要滿足的最低重要性)且confidence(X=>Y)>=confmin(最小置信度,它表示關聯規則需要滿足的最低可靠 性)稱關聯規則X=>Y為強關聯規則,否則稱關聯規則X=>Y為弱關聯規則。

 


例:下圖是某日超市的購物記錄(注意Items已經排好序),使用上面敘述的Apriori算法實現了挖掘頻繁項集,其中頻繁項集I={i1,i2,i5}為頻繁3-項集合L3,求由I產生哪些強關聯規則?(最小支持度閾值為20%,最小置信度閾值為80%)



 


I的非空子集有{i1,i2}、{i1,i5}、{i2,i5}、{i1}、{i2}和{i5}。 
結果關聯規則如下,每個都列出置信度 
1).i1 ∧i2=>i5 ,共10個事務;5個事務包含i1,i2;2個事務包含i1,i2和i5   confidence=2/5=40%,support=2/10=20% 
2).i1 ∧i5=>i2 ,共10個事務;2個事務包含i1,i5;2個事務包括i1,i2和i5   confidence=2/2=100%,support=2/10=20% 
3).i2 ∧i5=>i1 ,共10個事務;2個事務包含i2,i5;2個事務包含i1,i2和i5    confidence=2/2=100%,support=2/10=20% 
4).i1=>i2 ∧i5 ,共10個事務;7個事務包含i1;2個事務包含i1,i2和i5       confidence=2/7=28%,support=2/10=20% 
5).i2=>i1 ∧i5 ,共10個事務;8個事務包含i2;2個事務包含i1,i2和i5       confidence=2/8=25%,support=2/10=20% 
6).i5=>i1 ∧i2 ,共10個事務;2個事務包含i5;2個事務包含i1,i2和i5       confidence=2/2=100%,support=2/10=20% 
因最小置信度閾值為80%,最小支持度閾值為20%,則236規則符合要求,是頻繁項集I={i1,i2,i5}產生的強關聯規則且可以輸出。


(自己的推測:如果給定的是最小支持度計數為2,則有10個事務,最小支持度閾值supmin=2/10=20%)

 在實際應用中訂單每天增加,我們采用增量的方式計算,去掉支持度的限制

 

原文地址:http://liyonghui160com.iteye.com/blog/2080531


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM