机器学习(十八)——关联规则挖掘
關(guān)聯(lián)規(guī)則挖掘
基本概念(續(xù))
定義一:設I={i1,i2,…,im},是m個不同的項目的集合,每個ik稱為一個項目。項目的集合I稱為項集。其元素的個數(shù)稱為項集的長度,長度為k的項集稱為k-項集。引例中每個商品就是一個項目,項集為I={bread,beer,cake,cream,milk,tea},I的長度為6。
定義二:每筆交易T是項集I的一個子集。對應每一個交易有一個唯一標識交易號,記作TID。交易全體構(gòu)成了交易數(shù)據(jù)庫D,|D|等于D中交易的個數(shù)。引例中包含10筆交易,因此|D|=10。
定義三:對于項集X,設定count(X?T)為交易集D中包含X的交易的數(shù)量,則項集X的支持度為:
support(X)=count(X?T)|D|
引例中X={bread,milk}出現(xiàn)在T1,T2,T5,T9和T10中,所以支持度為0.5。
定義四:最小支持度是項集的最小支持閥值,記為SUPmin,代表了用戶關(guān)心的關(guān)聯(lián)規(guī)則的最低重要性。支持度不小于SUPmin的項集稱為頻繁集,長度為k的頻繁集稱為k-頻繁集。如果設定SUPmin為0.3,引例中{bread,milk}的支持度是0.5,所以是2-頻繁集。
定義五:關(guān)聯(lián)規(guī)則是一個蘊含式:
R:X?Y
其中X?I,Y?I,并且X∩Y=?。表示項集X在某一交易中出現(xiàn),則導致Y以某一概率也會出現(xiàn)。用戶關(guān)心的關(guān)聯(lián)規(guī)則,可以用兩個標準來衡量:支持度和可信度。
定義六:關(guān)聯(lián)規(guī)則R的支持度是交易集同時包含X和Y的交易數(shù)與|D|之比。即:
support(X?Y)=count(X∩Y)|D|
支持度反映了X、Y同時出現(xiàn)的概率。關(guān)聯(lián)規(guī)則的支持度等于頻繁集的支持度。
定義七:對于關(guān)聯(lián)規(guī)則R,可信度是指包含X和Y的交易數(shù)與包含X的交易數(shù)之比。即:
confidence(X?Y)=support(X?Y)support(X)
可信度反映了如果交易中包含X,則交易包含Y的概率。一般來說,只有支持度和可信度較高的關(guān)聯(lián)規(guī)則才是用戶感興趣的。
定義八:設定關(guān)聯(lián)規(guī)則的最小支持度和最小可信度為SUPmin和CONFmin。規(guī)則R的支持度和可信度均不小于SUPmin和CONFmin,則稱為強關(guān)聯(lián)規(guī)則。關(guān)聯(lián)規(guī)則挖掘的目的就是找出強關(guān)聯(lián)規(guī)則,從而指導商家的決策。
這八個定義包含了關(guān)聯(lián)規(guī)則相關(guān)的幾個重要基本概念,關(guān)聯(lián)規(guī)則挖掘主要有兩個問題:
1.找出交易數(shù)據(jù)庫中所有大于或等于用戶指定的最小支持度的頻繁項集。
2.利用頻繁項集生成所需要的關(guān)聯(lián)規(guī)則,根據(jù)用戶設定的最小可信度篩選出強關(guān)聯(lián)規(guī)則。
其中,步驟1是關(guān)聯(lián)規(guī)則挖掘算法的難點,下文介紹的Apriori算法和FP-growth算法,都是解決步驟1問題的算法。
參考:
http://blog.csdn.net/OpenNaive/article/details/7047823
Apriori算法
Apriori算法的思路如下:
1.第一次掃描交易數(shù)據(jù)庫D時,產(chǎn)生1-頻繁集。在此基礎上經(jīng)過連接、修剪產(chǎn)生2-頻繁集。以此類推,直到無法產(chǎn)生更高階的頻繁集為止。
2.在第k次循環(huán)中,也就是產(chǎn)生k-頻繁集的時候,首先產(chǎn)生k-候選集,k-候選集中每一個項集都是對兩個只有一個項不同的屬于k-1頻繁集的項集連接產(chǎn)生的。
3.k-候選集經(jīng)過篩選后產(chǎn)生k-頻繁集。
從頻繁集的定義,我們可以很容易的推導出如下結(jié)論:
如果項目集X是頻繁集,那么它的非空子集都是頻繁集。
如果k-候選集中的項集Y,包含有某個k-1階子集不屬于k-1頻繁集,那么Y就不可能是頻繁集,應該從候選集中裁剪掉。Apriori算法就是利用了頻繁集的這個性質(zhì)。
參考:
http://zhan.renren.com/dmeryuyang?gid=3602888498023976650&checked=true
http://blog.csdn.net/lizhengnanhua/article/details/9061755
FP-growth算法
Aprori算法利用頻繁集的兩個特性,過濾了很多無關(guān)的集合,效率提高不少,但是我們發(fā)現(xiàn)Apriori算法是一個候選消除算法,每一次消除都需要掃描一次所有數(shù)據(jù)記錄,造成整個算法在面臨大數(shù)據(jù)集時顯得無能為力。
FP-Growth算法是韓家煒等人在2000年提出的關(guān)聯(lián)分析算法。它通過構(gòu)造一個樹結(jié)構(gòu)來壓縮數(shù)據(jù)記錄,使得挖掘頻繁項集只需要掃描兩次數(shù)據(jù)記錄,而且該算法不需要生成候選集合,所以效率會比較高。
注:韓家煒,中國科學技術(shù)大學本科(1979)+中科院碩士+威斯康辛大學博士(1985)。美國伊利諾伊大學香檳分校計算機系教授,IEEE和ACM院士。
FpGrowth算法的平均效率遠高于Apriori算法,但是它并不能保證高效率,它的效率依賴于數(shù)據(jù)集,當數(shù)據(jù)集中的頻繁項集的沒有公共項時,所有的項集都掛在根結(jié)點上,不能實現(xiàn)壓縮存儲,而且Fptree還需要其他的開銷,需要存儲空間更大,使用FpGrowth算法前,對數(shù)據(jù)分析一下,看是否適合用FpGrowth算法。
參考:
http://www.cnblogs.com/fengfenggirl/p/associate_fpgowth.html
幸存者偏差
二戰(zhàn)期間,盟軍需要對戰(zhàn)斗機進行裝甲加厚,以提高生還率,但由于軍費有限,只能進行局部升級。那么問題來了,究竟哪個部位最關(guān)鍵,最值得把裝甲加厚來抵御敵方炮火呢?人們眾口不一,最后一致決定采用統(tǒng)計調(diào)查的方式來解決,即:仔細檢查每一駕戰(zhàn)斗機返回時受到的損傷程度,計算出飛機整體的受彈狀況,然后根據(jù)大數(shù)據(jù)分析決定。
不久,統(tǒng)計數(shù)據(jù)很快出爐:盟軍飛機普遍受彈最嚴重的地方是機翼,有的幾乎被打成了篩子;相反,受彈最輕的地方是駕駛艙及尾部發(fā)動機,許多飛機的駕駛艙甚至連擦傷都沒有。
正當所有人拿著這份確鑿無疑的報告準備給機翼加厚裝甲時,統(tǒng)計學家Abraham Wald阻攔了他們,同時提出了一個完全相反的方案:加厚駕駛艙與尾部。理由非常簡單:這兩個位置中彈的飛機,都沒有回來。換言之,它們是一份沉默的數(shù)據(jù)——“死人不會說話”。
最后,盟軍高層紛紛聽取了這個建議,加固了駕駛艙與尾部,果然空中戰(zhàn)場局勢得以好轉(zhuǎn),駕駛員生還率也大大提高。事實證明,這是一個無比英明的措施。
這個事例也被稱作“幸存者偏差”(Survivorship bias)。它是一種典型的由于模型不當,導致的“數(shù)據(jù)說謊”。
注:Abraham Wald,1902~1950,生于奧匈帝國,維也納大學博士。1938年為躲避納粹,移民美國,哥倫比亞大學教授。Herman Chernoff的導師。其子Robert M. Wald,為著名理論物理學家,芝加哥大學教授,黑洞理論的提出者之一。
關(guān)聯(lián)規(guī)則評價
“數(shù)據(jù)說謊”的問題很普遍。再看這樣一個例子,我們分析一個購物籃數(shù)據(jù)中購買游戲光碟和購買影片光碟之間的關(guān)聯(lián)關(guān)系。交易數(shù)據(jù)集共有10,000條記錄,如表1所示:
| 買影片 | 4000 | 3500 | 7500 |
| 不買影片 | 2000 | 500 | 2500 |
| 列總計 | 6000 | 4000 | 10000 |
假設我們設置得最小支持度為30%,最小自信度為60%。從上面的表中,可以得到:
support(買游戲光碟→買影片光碟)=4000/10000=40%
confidence(買游戲光碟→買影片光碟)=4000/6000=66%
這條規(guī)則的支持度和自信度都滿足要求,因此我們很興奮,我們找到了一條強規(guī)則,于是我們建議超市把影片光碟和游戲光碟放在一起,可以提高銷量。
可是我們想想,一個喜歡的玩游戲的人會有時間看影片么,這個規(guī)則是不是有問題,事實上這條規(guī)則誤導了我們。在整個數(shù)據(jù)集中買影片光碟的概率p(買影片)=7500/10000=75%,而買游戲的人也買影片的概率只有66%,66%<75%恰恰說明了買游戲光碟抑制了影片光碟的購買,也就是說買了游戲光碟的人更傾向于不買影片光碟,這才是符合現(xiàn)實的。
從上面的例子我們看到,支持度和自信度并不總能成功濾掉那些我們不感興趣的規(guī)則,因此我們需要一些新的評價標準,下面介紹幾種評價標準:
相關(guān)性系數(shù)
相關(guān)性系數(shù)的英文名是Lift,這就是一個單詞,而不是縮寫。
lift(X?Y)=supp(X∪Y)supp(X)×supp(Y)
lift(X?Y)???>1,=1,<1,正相關(guān)獨立負相關(guān)
實際運用中,正相關(guān)和負相關(guān)都是我們需要關(guān)注的,而獨立往往是我們不需要的。顯然:
lift(X?Y)=lift(Y?X)
確信度
Conviction的定義如下:
conv(X?Y)=1?supp(Y)1?conf(X?Y)
它的值越大,表明X、Y的獨立性越小。
卡方系數(shù)
卡方系數(shù)是與卡方分布有關(guān)的一個指標。參見:
https://en.wikipedia.org/wiki/Chi-squared_distribution
χ2=∑i=1n(Oi?Ei)2Ei
注:上式最早是Pearson給出的。
公式中的Oi表示數(shù)據(jù)的實際值,Ei表示期望值,不理解沒關(guān)系,我們看一個例子就明白了。
| 買影片 | 4000(4500) | 3500(3000) | 7500 |
| 不買影片 | 2000(1500) | 500(1000) | 2500 |
| 列總計 | 6000 | 4000 | 10000 |
表2的括號中表示的是期望值。以第1行第1列的4500為例,其計算方法為:7500×6000/10000。
經(jīng)計算可得表2的卡方系數(shù)為555.6?;谥眯潘胶妥杂啥?span id="ozvdkddzhkzd" class="MathJax_Preview">(r?1)?(c?1)=(行數(shù)?1)?(列數(shù)?1)=1,查表得到自信度為(1-0.001)的值為6.63。
555.6>6.63,因此拒絕A、B獨立的假設,即認為A、B是相關(guān)的,而
E(買影片,買游戲)=4500>4000 ,因此認為A、B呈負相關(guān)。全自信度
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)}
最大自信度
max_confidence(A,B)=max{confidence(A→B),confidence(B→A)}
Kulc
kulc(A,B)=confidence(A→B)+confidence(B→A)2
cosine距離
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))
Leverage
Leverage(A,B)=P(A∩B)?P(A)P(B)
不平衡因子
imbalance ratio的定義:
IR(A,B)=|support(A)?support(B)|(support(A)+support(B)?support(A∩B))
全自信度、最大自信度、Kulc、cosine,Leverage是不受空值影響的,這在處理大數(shù)據(jù)集是優(yōu)勢更加明顯,因為大數(shù)據(jù)中空記錄更多,根據(jù)分析我們推薦使用kulc準則和不平衡因子結(jié)合的方法。
參考:
http://www.cnblogs.com/fengfenggirl/p/associate_measure.html
總結(jié)
以上是生活随笔為你收集整理的机器学习(十八)——关联规则挖掘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习(十七)——决策树, 推荐系统进
- 下一篇: 天池大赛, Storm