机器学习-非监督分类算法之关联规则
一、什么是關聯規則Association Rule
所謂數據挖掘就是以某種方式分析源數據,從中發現一些潛在的有用的信息,即數據挖掘又可以稱作知識發現。而機器學習算法則是這種“某種方式”,關聯規則作為十大經典機器學習算法之一,因此搞懂關聯規則(雖然目前使用的不多)自然有著很重要的意義。顧名思義,關聯規則就是發現數據背后存在的某種規則或者聯系。關聯規則挖掘的目的就是找出強關聯規則,從而指導商家的決策。
經典例子是尿布和啤酒,除此之外,舉個簡單的例子:通過調研超市顧客購買的東西,可以發現30%的顧客會同時購買床單和枕套,而在購買床單的顧客中有80%的人購買了枕套,這就存在一種隱含的關系:床單→枕套,也就是說購買床單的顧客會有很大可能購買枕套,因此商場可以將床單和枕套放在同一個購物區,方便顧客購買。
一般,關聯規則可以應用的場景有:
-
- 優化貨架商品擺放或者優化郵寄商品的目錄
- 交叉銷售或者捆綁銷售
- 搜索詞推薦或者識別異
二、必備概念
- 項目:交易數據庫中的一個字段,對超市的交易來說一般是指一次交易中的一個物品,如:牛奶
- 事務:某個客戶在一次交易中,發生的所有項目的集合:如{牛奶,面包,啤酒}
- 項集:包含若干個項目的集合(一次事務中的),一般會大于0個
- 支持度:項集{X,Y}在總項集中出現的概率
- 頻繁項集:某個項集的支持度大于設定閾值(人為設定或者根據數據分布和經驗來設定),即稱這個項集為頻繁項集。
- 置信度:在先決條件X發生的條件下,由關聯規則{X->Y }推出Y的概率(見下面的例子)
- 提升度:表示含有X的條件下同時含有Y的概率,與無論含不含X含有Y的概率之比。
支持度和提升度示例:
假如有一條規則:牛肉—>雞肉,那么同時購買牛肉和雞肉的顧客比例是3/7,而購買牛肉的顧客當中也購買了雞肉的顧客比例是3/4。這兩個比例參數是很重要的衡量指標,它們在關聯規則中稱作支持度(support)和置信度(confidence)。
提升度示例:
1000名顧客,購買年貨,A組有500人購買茶葉,有450人購買咖啡;B組有0人購買茶葉,有450人購買咖啡。
| ? | 購買茶葉 | 購買咖啡 |
| A組(500人) | 500 | 450 |
| B組(500人) | 0 | 450 |
茶葉->咖啡的支持度=450/1000=45%
茶葉->咖啡的置信度=450/500=90%
茶葉->咖啡的提升度=90%/90%=1
說明:
(1)由于lift(茶葉X->咖啡Y)=1,所以說明X與Y相互獨立,即是否有X對于Y的出現沒有影響。雖然支持度和置信度都高,但它們之間沒有必然的關聯關系。
(2)滿足最小支持度和最小置信度的關聯關系叫做強關聯關系
-
- 如果lift>1,叫做有效的強關聯關系,
- 如果lift<=1,叫做無效的強關聯關系
- 特別的如果lift(X->Y)=1,則稱X與Y相互獨立
三、實現過程
從以上的分析可以得知,關聯規則是從事務集合中挖掘出這樣的關聯規則{X->Y}:它的支持度和置信度要大于最小閾值(minSup,minConf),當然這個最小閾值是由用戶指定的,可以根據數據分布和經驗;同時他的提升度最好是大于1的(具體值根據實際情況設定,例如:3、5均可),即是有效強關聯規則。
使用關聯規則的過程主要包含以下三個步驟:
(1)數據篩選,首先對數據進行清洗,清洗掉那些公共的項目,比如:熱門詞,通用詞(此步依據具體項目而定)
(2)根據支持度(support),從事務集合中找出頻繁項集(使用算法:Apriori算法,FP-Growth算法)
(3)根據置信度(confidence),從頻繁項集中找出強關聯規則(置信度閾值需要根據實驗或者經驗而定)
(4)根據提升度(lift),從強關聯規則中篩選出有效的強關聯規則(提升度的設定需要經過多次試驗確定)
關聯規則中,比較關鍵的兩個點是:(1)三種閾值的設定(三個閾值點需要經過對此實驗或者經驗才能找到合適的閾值)(2)如何找出頻繁項集。
下節主要討論如何解決尋找頻繁項集的問題,目前主要有兩種算法:(1)Apriori算法(2)FP-Growth算法,下面分別介紹一下這兩種算法。
四、生成頻繁項集-Apriori算法[1]
(1)算法原理
它主要利用了向下封閉屬性:如果一個項集是頻繁項目集,那么它的非空子集必定是頻繁項目集。它先生成1-頻繁項目集,再利用1-頻繁項目集生成2-頻繁項目集。。。然后根據2-頻繁項目集生成3-頻繁項目集。。。依次類推,直至生成所有的頻繁項目集,然后從頻繁項目集中找出符合條件的關聯規則。
(2)生成頻繁項集過程
它的原理是根據k-頻繁項目集生成(k+1)-頻繁項目集。因此首先要做的是找出1-頻繁項目集,這個很容易得到,只要循環掃描一次事務集合統計出項目集合中每個元素的支持度,然后根據設定的支持度閾值進行篩選,即可得到1-頻繁項目集。下面證明一下為何可以通過k-頻繁項目集生成(k+1)-頻繁項目集:(下面證明如何從K-頻繁項集生成k+1頻繁項集)
假設某個項目集S={s1,s2...,sn}是頻繁項目集,那么它的(n-1)非空子集{s1,s2,...sn-1},{s1,s2,...sn-2,sn}...{s2,s3,...sn}必定都是頻繁項目集,通過觀察,任何一個含有n個元素的集合A={a1,a2,...an},它的(n-1)非空子集必行包含兩項{a1,a2,...an-2,an-1}和 {a1,a2,...an-2,an},對比這兩個子集可以發現,它們的前(n-2)項是相同的,它們的并集就是集合A。對于2-頻繁項目集,它的所有1非空子集也必定是頻繁項目集,那么根據上面的性質,對于2-頻繁項目集中的任一個,在1-頻繁項目集中必定存在2個集合的并集與它相同。因此在所有的1-頻繁項目集中找出只有最后一項不同的集合,將其合并,即可得到所有的包含2個元素的項目集,得到的這些包含2個元素的項目集不一定都是頻繁項目集,所以需要進行剪枝。剪枝的辦法是看它的所有1非空子集是否在1-頻繁項目集中,如果存在1非空子集不在1-頻繁項目集中,則將該2項目集剔除。經過該步驟之后,剩下的則全是頻繁項目集,即2-頻繁項目集。依次類推,可以生成3-頻繁項目集。。直至生成所有的頻繁項目集。
(3)生成強關聯規則
得到頻繁項目集之后,則需要從頻繁項目集中找出符合條件的關聯規則。最簡單的辦法是:遍歷所有的頻繁項目集,然后從每個項目集中依次取1、2、...k個元素作為后件,該項目集中的其他元素作為前件,計算該規則的置信度進行篩選即可。這樣的窮舉效率顯然很低。假如對于一個頻繁項目集f,可以生成下面這樣的關聯規則:(f-β)—>β,那么這條規則的置信度=f.count/(f-β).count
(下面證明如何生成強關聯規則,即先生成小后件的,再根據小后件依次生成大后件,因為假設該規則是強關聯規則,則(f-βsub)—>βsub也是強關聯規則)
根據這個置信度計算公式可知,對于一個頻繁項目集f.count是不變的,而假設該規則是強關聯規則,則(f-βsub)—>βsub也是強關聯規則,其中βsub是β的子集,因為(f-βsub).count肯定小于(f-β).count。即給定一個頻繁項目集f,如果一條強關聯規則的后件為β,那么以β的非空子集為后件的關聯規則都是強關聯規則。所以可以先生成所有的1-后件(后件只有一項)強關聯規則,然后再生成2-后件強關聯規則,依次類推,直至生成所有的強關聯規則。
五、如何生成頻繁項集-FP-Growth算法[4]
Apriori算法是關聯規則的基本算法,很多用于發現關聯規則的算法都是基于Apriori算法,但Apriori算法需要多次訪問數據庫,具有嚴重的性能問題。FP-Growth算法只需要兩次掃描數據庫,相比于Apriori減少了I/O操作,克服了Apriori算法需要多次掃描數據庫的問題。本文采用如下的樣例數據
?
| 1 2 3 4 5 6 7 8 9 | ????A;B;E; B;D; B;C; A;B;D A;C; B;C; A;C; A;B;C;E; A;B;C;??? |
?
?(1)FP-Growth生成FP-Tree
?
FP-Growth算法將數據庫中的頻繁項集壓縮到一顆頻繁模式樹中,同時保持了頻繁項集之間的關聯關系。通過對該頻繁模式樹挖掘,得到頻繁項集。其過程如下:
?
?
圖5.1 FT-Tree
圖5.2 ?生成fp-tree的步驟
?
(2)從FP-Tree挖掘頻繁項集
?
從FP-Tree重可以挖掘出頻繁項集,其過程如下:
?
圖5.3 ?頻繁項集挖掘過程
從頻繁1項集鏈表中按照逆序開始,鏈表可以追溯到每個具有相同項的節點。
(3)找出強關聯規則
同第四節
(4)找出有效的強關聯規則
同第四節
至此,FP-Growth算法生成頻繁項集已經結束。
以上內容的參考文獻是https://www.cnblogs.com/hdu-cpd/p/5987904.html,感謝博主
七、誤導我們的強關聯規則-關聯規則評價準則
前面我們討論的關聯規則都是用支持度和自信度來評價的,如果一個規則的自信度高,我們就說它是一條強規則,但是自信度和支持度有時候并不能度量規則的實際意義和業務關注的興趣點。
一個誤導我們的強規則
???? 看這樣一個例子,我們分析一個購物籃數據中購買游戲光碟和購買影片光碟之間的關聯關系。交易數據集共有10,000條記錄,其中購買6000條包含游戲光碟,7500條包含影片光碟,4000條既包含游戲光碟又包含影片光碟。數據集如下表所示:
| ? | 買游戲 | 不買游戲 | 行總計 |
| 買影片 | 4000 | 3500 | 7500 |
| 不買影片 | 2000 | 500 | 2500 |
| 列總計 | 6000 | 4000 | 10000 |
????? 假設我們設置得最小支持度為30%,最小自信度為60%。從上面的表中,可以得到:support(買游戲光碟—>買影片光碟)=4000/10000=40%,confidence(買游戲光碟—>買影片光碟)=4000/7500*100%=66%(寫錯了,應該是4000/6000)。這條規則的支持度和自信度都滿足要求,因此我們很興奮,我們找到了一條強規則,于是我們建議超市把影片光碟和游戲光碟放在一起,可以提高銷量。
????? 可是我們想想,一個喜歡的玩游戲的人會有時間看影片么,這個規則是不是有問題,事實上這條規則誤導了我們。在整個數據集中買影片光碟的概率p(買影片)=7500/10000=75%,而買游戲的人也買影片的概率只有66%,66%<75%恰恰說明了買游戲光碟抑制了影片光碟的購買,也就是說買了游戲光碟的人更傾向于不買影片光碟,這才是符合現實的。
???? 從上面的例子我們看到,支持度和自信度并不能過成功濾掉那些我們不感興趣的規則,因此我們需要一些新的評價標準,下面介紹六中評價標準:相關性系數,卡方指數,全自信度、最大自信度、Kulc、cosine距離。
相關性系數lift
???? 從上面游戲和影片的例子中,我們可以看到游戲和影片不是正相關的,因此用相關性度量關聯規則可以過濾這樣的規則,對于規則A—>B或者B—>A,lift(A,B)=P(A交B)/(P(A)*P(B)),如果lift(A,B)>1表示A、B呈正相關,lift(A,B)<1表示A、B呈負相關,lift(A,B)=1表示A、B不相關(獨立)。實際運用中,正相關和負相關都是我們需要關注的,而獨立往往是我們不需要的,兩個商品都沒有相互影響也就是不是強規則,lift(A,B)等于1的情形也很少,一般只要接近于1我們就認為是獨立了。
????? 注意相關系數只能確定相關性,相關不是因果,所以A—>B或者B—>A兩個規則的相關系數是一樣的,另外lift(A,B)=P(A交B)/(P(A)*P(B))=P(A)*P(B|A)/(P(A)*P(B))=P(B|A)/P(B)=confidence(A—>B)/support(B)=confidence(B—>A)/support(A)。
卡方系數
????? 卡方分布是數理統計中的一個重要分布,利用卡方系數我們可以確定兩個變量是否相關。卡方系數的定義:
公式中的observed表示數據的實際值,expected表示期望值,不理解沒關系,我們看一個例子就明白了。
| ? | 買游戲 | 不買游戲 | 行總計 |
| 買影片 | 4000(4500) | 3500(3000) | 7500 |
| 不買影片 | 2000(1500) | 500(1000) | 2500 |
| 列總計 | 6000 | 4000 | 10000 |
???? 上面表格的括號中表示的是期望值,(買影片,買游戲)的期望值E=6000*(7500/10000)=4500,總體記錄中有75%的人買影片,而買游戲的有6000人,于是我們期望這6000人中有75%(即4500)的人買影片。其他三個值可以類似計算得到。現在我們計算一下,買游戲與買影片的卡方系數:
卡方系數X=(4000-4500)^2/4500+(3500-3000)^2/3000+(2000-1500)^2/1500+(500-1000)^2/1000=555.6。
????? 卡方系數需要查表才能確定值的意義,基于置信水平和自由度(r-1)*(c-1)=(行數-1)*(列數-1)=1,查表得到自信度為(1-0.001)的值為6.63,555.6大于6.63,因此拒絕A、B獨立的假設,即認為A、B是相關的,而expected(買影片,買游戲)=4500>4000,因此認為A、B呈負相關。這里需要一定的概率統計知識。如果覺得不好理解,可以用其他的評價標準。
全自信度
???? 全自信度all_confidence的定義如下:all_confidence(A,B)=P(A交B)/max{P(A),P(B)}
?????????????????????????????????????????????????????????????????????????????? =min{P(B|A),P(A|B)}
?????????????????????????????????????????????????????????????????????????????? =min{confidence(A—>B),confidence(B—>A)}
??? 對于前面的例子,all_confidence(買游戲,買影片)=min{confidence(買游戲—>買影片),confidence(買影片—>買游戲)}=min{66%,53.3%}=53.3%。可以看出全自信度不失為一個好的衡量標準。
最大自信度
???? 最大自信度則與全自信度相反,求的不是最小的支持度而是最大的支持度,max_confidence(A,B)=max{confidence(A—>B),confidence(B—>A)},不過感覺最大自信度不太實用。
Kulc
??? Kulc系數就是對兩個自信度做一個平均處理:kulc(A,B)=(confidence(A—>B)+confidence(B—>A))/2。,kulc系數是一個很好的度量標準,稍后的對比我們會看到。
cosine(A,B)
???? cosine(A,B)=P(A交B)/sqrt(P(A)*P(B))=sqrt(P(A|B)*P(B|A))=sqrt(confidence(A—>B)*confidence(B—>A))
七個評價準則的比較
???? 這里有這么多的評價標準,究竟哪些好,哪些能夠準確反應事實,我們來看一組對比。
| ? | milk | milk | 行總計 |
| coffee | MC | MC | C |
| coffee | MC | MC | C |
| 列總計 | M | M | total |
上表中,M表示購買了牛奶、C表示購買了咖啡,M表示不購買牛奶,C表示不購買咖啡,下面來看6個不同的數據集,各個度量標準的值
| 數據 | MC | MC | MC | MC | total | C->M自信度 | M->C自信度 | 卡方 | lift | all_conf | max_conf | Kulc | cosine |
| D1 | 10000 | 1000 | 1000 | 100000 | 112000 | 0.91 | 0.91 | 90557 | 9.26 | 0.91 | 0.91 | 0.91 | 0.91 |
| D2 | 10000 | 1000 | 1000 | 100 | 12100 | 0.91 | 0.91 | 0 | 1.00 | 0.91 | 0.91 | 0.91 | 0.91 |
| D3 | 100 | 1000 | 1000 | 100000 | 102100 | 0.09 | 0.09 | 670 | 8.44 | 0.09 | 0.09 | 0.09 | 0.09 |
| D4 | 1000 | 1000 | 1000 | 100000 | 103000 | 0.50 | 0.50 | 24740 | 25.75 | 0.50 | 0.50 | 0.50 | 0.50 |
| D5 | 1000 | 100 | 10000 | 100000 | 111100 | 0.91 | 0.09 | 8173 | 9.18 | 0.09 | 0.91 | 0.50 | 0.29 |
| D6 | 1000 | 10 | 100000 | 100000 | 201010 | 0.99 | 0.01 | 965 | 1.97 | 0.01 | 0.99 | 0.50 | 0.10 |
我們先來看前面四個數據集D1-D4,從后面四列可以看出,D1,D2中milk與coffee是正相關的,而D3是負相關,D4中是不相關的,大家可能覺得,D2的lift約等于1應該是不相關的,事實上對比D1你會發現,lift受MC的影響很大,而實際上我們買牛奶和咖啡的相關性不應該取決于不買牛奶和咖啡的交易記錄,這正是lift和卡方的劣勢,容易受到數據記錄大小的影響。而全自信度、最大自信度、Kulc、cosine與MC無關,它們不受數據記錄大小影響。卡方和lift還把D3判別為正相關,而實際上他們應該是負相關,M=100+1000=1100,如果這1100中有超過550的購買coffee那么就認為是正相關,而我們看到MC=100<550,可以認為是負相關的。
上面我們分析了全自信度、最大自信度、Kulc、cosine與空值無關,但這幾個中哪一個更好呢?我們看后面四個數據集D4-D6,all_conf與cosine得出相同的結果,即D4中milk與coffee是獨立的,D5、D6是負相關的,D5中support(C-->M)=0.91而support(M-->C)=0.09,這樣的關系,簡單的認為是負相關或者正相關都不妥,Kulc做平均處理倒很好,平滑后認為它們是無關的,我們再引入一個不平衡因子IR(imbalance ratio):
IR(A,B)=|sup(a)-sup(B)|/(sup(A)-sup(B)-sup(A交B))(注:應為(sup(A)+sup(B)-sup(A交B))
D4總IR(C,M)=0,非常平衡,D5中IR(C,M)=0.89,不平衡,而D6中IR(C,M)=0.99極度不平衡,我們應該看到Kulc值雖然相同但是平衡度不一樣,在實際中應該意識到不平衡的可能,根據業務作出判斷,因此這里我們認為Kulc結合不平衡因子的是較好的評價方法。
另外weka中還使用?Conviction和Leverage。Conviction(A,B) =?P(A)P(B)/P(AB),?Leverage(A,B) = P(A交B)-P(A)P(B),Leverage是不受空值影響,而Conviction是受空值影響的。
總結
介紹了9個關聯規則評價的準則,其中全自信度、最大自信度、Kulc、cosine,Leverage是不受空值影響的,這在處理大數據集是優勢更加明顯,因為大數據中想MC這樣的空記錄更多,根據分析我們推薦使用kulc準則和不平衡因子結合的方法。
參考文獻
[1]:HanJiaWei. Data Mining: concept and ?techniques.
以上內容參考https://www.cnblogs.com/fengfenggirl/p/associate_measure.html,感謝博主
總結
以上是生活随笔為你收集整理的机器学习-非监督分类算法之关联规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 访问控制符
- 下一篇: 机器学习基本概念-阿里云大学