【机器学习】数据挖掘算法——关联规则(二),挖掘过程,Aprioir算法
關聯規則挖掘的原理和過程
從關聯規則(一)的分析中可知,關聯規則挖掘是從事務集合中挖掘出這樣的關聯規則:它的支持度和置信度大于最低閾值(minsup,minconf),這個閾值是由用戶指定的。根據
support=(X,Y).count/T.countsupport=(X,Y).count/T.countsupport=(X,Y).count/T.count
confidence=(X,Y).count/X.countconfidence=(X,Y).count/X.countconfidence=(X,Y).count/X.count
要想找出滿足條件的關聯規則,首先必須找出這樣的集合F=X∪YF=X \cup YF=X∪Y ,它滿足F.count/T.count≥minsupF.count/T.count \geq minsupF.count/T.count≥minsup,其中F.countF.countF.count是TTT中包含FFF的事務的個數,然后再從FFF中找出這樣的蘊含式X→YX\to YX→Y,它滿足(X,Y).count/X.count≥minconf(X,Y).count/X.count ≥ minconf(X,Y).count/X.count≥minconf,并且X=F?YX=F-YX=F?Y。我們稱像FFF這樣的集合稱為頻繁項目集,假如FFF中的元素個數為kkk,我們稱這樣的頻繁項目集為k?頻繁項目集k-頻繁項目集k?頻繁項目集,它是項目集合III的子集。所以關聯規則挖掘可以大致分為兩步:
通俗的理解:
頻繁項集所依賴的支持度其實就是覆蓋率。
關聯規則所依賴的可信度其實就是條件概率。
用于求解關聯規則頻繁項集的算法較為常用的有三種:
本章節主要介紹Apriori算法。
Apriori算法
最出名的關聯規則挖掘算法是Apriori算法,它主要利用了向下封閉屬性:如果一個項集是頻繁項目集,那么它的非空子集必定是頻繁項目集。它先生成1-頻繁項目集,再利用1-頻繁項目集生成2-頻繁項目集。。。然后根據2-頻繁項目集生成3-頻繁項目集…依次類推,直至生成所有的頻繁項目集,然后從頻繁項目集中找出符合條件的關聯規則。
下面來討論一下頻繁項目集的生成過程,它的原理是根據k?頻繁項目集k-頻繁項目集k?頻繁項目集生成(k+1)?頻繁項目集(k+1)-頻繁項目集(k+1)?頻繁項目集。因此首先要做的是找出1?頻繁項目集1-頻繁項目集1?頻繁項目集,這個很容易得到,只要循環掃描一次事務集合統計出項目集合中每個元素的支持度,然后根據設定的支持度閾值進行篩選,即可得到1?頻繁項目集1-頻繁項目集1?頻繁項目集。下面證明一下為何可以通過k?頻繁項目集k-頻繁項目集k?頻繁項目集生成(k+1)?(k+1)-(k+1)?頻繁項目集:
假設某個項目集S={s1,s2,?sn}S=\{s_1,s_2,\cdots s_n\}S={s1?,s2?,?sn?}是頻繁項目集,那么它的(n?1)(n-1)(n?1)非空子集{s1,s2,?sn?1}\{s_1,s_2,\cdots s_{n-1}\}{s1?,s2?,?sn?1?},{s1,s2,?sn?2,sn}\{s_1,s_2,\cdots s_{n-2},s_n\}{s1?,s2?,?sn?2?,sn?} ?\cdots? {s2,s3,?sn}\{s_2,s_3,\cdots s_n\}{s2?,s3?,?sn?}必定都是頻繁項目集,通過觀察,任何一個含有n個元素的集合A={a1,a2,?an}A=\{a_1,a_2,\cdots a_n\}A={a1?,a2?,?an?},它的(n?1)(n-1)(n?1)非空子集定會包含兩項{a1,a2,?an?2,an?1}\{a_1,a_2,\cdots a_{n-2},a_{n-1}\}{a1?,a2?,?an?2?,an?1?}和{a1,a2,?an?2,an}\{a_1,a_2,\cdots a_{n-2},a_n\}{a1?,a2?,?an?2?,an?},對比這兩個子集可以發現,它們的前(n?2)(n-2)(n?2)項是相同的,它們的并集就是集合AAA。對于2-頻繁項目集,它的所有1非空子集也必定是頻繁項目集,那么根據上面的性質,對于2-頻繁項目集中的任一個,在1-頻繁項目集中必定存在2個集合(不需要一定是最后一個元素不同)的并集與它相同。因此在所有的1-頻繁項目集中找出只有一項不同的集合,將其合并,即可得到所有的包含2個元素的項目集,得到的這些包含2個元素的項目集不一定都是頻繁項目集,所以需要進行剪枝。剪枝的辦法是看它的所有1非空子集是否在1-頻繁項目集中,如果存在1非空子集不在1-頻繁項目集中,則將該2項目集剔除。經過該步驟之后,剩下的則全是頻繁項目集,即2-頻繁項目集。依次類推,可以生成3-頻繁項目集…直至生成所有的頻繁項目集。
生成頻繁項集
生成一個頻繁集的步驟分聯合和剪枝兩步。
其中Lk?1L_{k-1}Lk?1?為頻繁集。合并只有一個元素不同的itemitemitem,如(1,2,3)、(1,3,7)和(1,4,9),就會是(1,2,3)和(1,3,7)合并成(1,2,3,7),而不會其他的合并,因為其他情況,兩元素有不只一個元素不同(為確保合并后的項集元素只增加了一個)。
合并后的集合,如果有子集不在原集合中,則把該合并集合刪除。例如:有2-頻繁項目集
{1,2},{1,3},{1,4},{2,3},{2,4}\{1,2\},\{1,3\},\{1,4\},\{2,3\},\{2,4\}{1,2},{1,3},{1,4},{2,3},{2,4}
因為{1,2},{1,3},{1,4}\{1,2\},\{1,3\},\{1,4\}{1,2},{1,3},{1,4}除了最后一個元素以外都相同,所以求{1,2},{1,3}\{1,2\},\{1,3\}{1,2},{1,3}的并集得到{1,2,3}\{1,2,3\}{1,2,3},{1,2}\{1,2\}{1,2}和{1,4}\{1,4\}{1,4}的并集得到{1,2,4},{1,3}和{1,4}\{1,2,4\},\{1,3\}和\{1,4\}{1,2,4},{1,3}和{1,4}的并集得到{1,3,4}\{1,3,4\}{1,3,4}。但是由于{1,3,4}\{1,3,4\}{1,3,4}的子集{3,4}\{3,4\}{3,4}不在2-頻繁項目集中,所以需要把{1,3,4}\{1,3,4\}{1,3,4}剔除掉。
生成強規則
??得到頻繁項目集之后,則需要從頻繁項目集中找出符合條件的強關聯規則。最簡單的辦法是:遍歷所有的頻繁項目集,然后從每個項目集中依次取1、2、?k1、2、\cdots k1、2、?k個元素作為后件,該項目集中的其他元素作為前件,計算該規則的置信度進行篩選即可。這樣的窮舉效率顯然很低。假如對于一個頻繁項目集fff,可以生成下面這樣的關聯規則:
(f?β)→β(f-\beta)\to \beta(f?β)→β
那么這條規則的置信度confidence=f.count/(f?β).countconfidence=f.count/(f-β).countconfidence=f.count/(f?β).count
??根據這個置信度計算公式可知,對于一個頻繁項目集f.countf.countf.count是不變的,而假設該規則是強關聯規則,則(f?βsub)→βsub(f-\beta_{sub})\to \beta_{sub}(f?βsub?)→βsub?也是強關聯規則,其中βsub\beta_{sub}βsub?是β\betaβ的子集,因為(f?βsub).count(f-\beta_{sub}).count(f?βsub?).count肯定小于(f?β).count(f-\beta).count(f?β).count。即給定一個頻繁項目集fff,如果一條強關聯規則的后件為βββ,那么以βββ的非空子集為后件的關聯規則都是強關聯規則。所以可以先生成所有的1-后件(后件只有一項)強關聯規則,然后再生成2-后件強關聯規則,依次類推(與生成頻繁項集類似),直至生成所有的強關聯規則。
一個例子
下面舉例說明Apiori算法的具體流程:
假如有項目集合I={1,2,3,4,5}I=\{1,2,3,4,5\}I={1,2,3,4,5},有事務集TTT:
設定minsup=3/7,minconf=5/7。
首先:生成頻繁項目集:
1-頻繁項目集:{1},{2},{3},{4},{5}\{1\},\{2\},\{3\},\{4\},\{5\}{1},{2},{3},{4},{5}
??生成2-頻繁項目集:
??根據1-頻繁項目集生成所有的包含2個元素的項目集:任意取兩個只有最后一個元素不同的1-頻繁項目集,求其并集,由于每個1-頻繁項目集元素只有一個,所以生成的項目集如下:
{1,2},{1,3},{1,4},{1,5}\{1,2\},\{1,3\},\{1,4\},\{1,5\}{1,2},{1,3},{1,4},{1,5}
{2,3},{2,4},{2,5}\{2,3\},\{2,4\},\{2,5\}{2,3},{2,4},{2,5}
{3,4},{3,5}\{3,4\},\{3,5\}{3,4},{3,5}
{4,5}\{4,5\}{4,5}
??計算它們的支持度,發現只有{1,2},{1,3},{1,4},{2,3},{2,4},{2,5}\{1,2\},\{1,3\},\{1,4\},\{2,3\},\{2,4\},\{2,5\}{1,2},{1,3},{1,4},{2,3},{2,4},{2,5}的支持度滿足要求,因此求得2-頻繁項目集:
{1,2},{1,3},{1,4},{2,3},{2,4}\{1,2\},\{1,3\},\{1,4\},\{2,3\},\{2,4\}{1,2},{1,3},{1,4},{2,3},{2,4}
??生成3-頻繁項目集:
??因為{1,2},{1,3},{1,4}\{1,2\},\{1,3\},\{1,4\}{1,2},{1,3},{1,4}除了最后一個元素以外都相同,所以求{1,2},{1,3}\{1,2\},\{1,3\}{1,2},{1,3}的并集得到{1,2,3}\{1,2,3\}{1,2,3},{1,2},{1,4}\{1,2\},\{1,4\}{1,2},{1,4}的并集得到{1,2,4}\{1,2,4\}{1,2,4},{1,3},{1,4}\{1,3\},\{1,4\}{1,3},{1,4}的并集得到{1,3,4}\{1,3,4\}{1,3,4}。但是由于{1,3,4}\{1,3,4\}{1,3,4}的子集{3,4}\{3,4\}{3,4}不在2-頻繁項目集中,所以需要把{1,3,4}\{1,3,4\}{1,3,4}剔除掉。然后再來計算{1,2,3}\{1,2,3\}{1,2,3}和{1,2,4}\{1,2,4\}{1,2,4}的支持度,發現{1,2,3}\{1,2,3\}{1,2,3}的支持度為3/7,{1,2,4}\{1,2,4\}{1,2,4}的支持度為2/7,所以需要把{1,2,4}\{1,2,4\}{1,2,4}剔除。同理可以對{2,3}\{2,3\}{2,3},{2,4}\{2,4\}{2,4}求并集得到{2,3,4}\{2,3,4\}{2,3,4},但是{2,3,4}\{2,3,4\}{2,3,4}的支持度不滿足要求,所以需要剔除掉。
??因此得到3-頻繁項目集:{1,2,3}\{1,2,3\}{1,2,3}。
??到此頻繁項目集生成過程結束。注意生成頻繁項目集的時候,頻繁項目集中的元素個數最大值為事務集中事務中含有的最大元素個數,即若事務集中事務包含的最大元素個數為k,那么最多能生成k-頻繁項目集,這個原因很簡單,因為事務集合中的所有事務都不包含(k+1)個元素,所以不可能存在(k+1)—頻繁項目集。在生成過程中,若得到的頻繁項目集個數小于2,生成過程也可以結束了。
??現在需要生成強關聯規則:
??這里只說明3-頻繁項目集生成關聯規則的過程:
??對于集合{1,2,3}\{1,2,3\}{1,2,3}
??先生成1-后件的關聯規則:
(1,2)→3(1,2)\to 3(1,2)→3,置信度=3/4
(1,3)→2(1,3)\to 2(1,3)→2,置信度=3/5
(2,3)→1(2,3)\to 1(2,3)→1,置信度=3/3
(1,3)→2(1,3)\to 2(1,3)→2 的置信度不滿足要求,所以剔除掉。因此得到1后件的集合{1}\{1\}{1},{3}\{3\}{3},然后再以{1,3}\{1,3\}{1,3}作為后件。
?? 2→(1,3)2\to (1,3)2→(1,3) 的置信度=3/5不滿足要求,所以對于3-頻繁項目集生成的強關聯規則為:(1,2)→3(1,2)\to 3(1,2)→3和(2,3)→1(2,3)\to 1(2,3)→1。
Apriori算法的優缺點
- 優點
Apriori算法采用了逐層搜索的迭代的方法,算法簡單明了,沒有復雜的理論推導,也易于實現。 - 缺點
- 改進方式有三個角度:
參考文章:http://www.cnblogs.com/dolphin0520/archive/2012/10/29/2733356.html
總結
以上是生活随笔為你收集整理的【机器学习】数据挖掘算法——关联规则(二),挖掘过程,Aprioir算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】数据挖掘算法——关联规则(一
- 下一篇: 【机器学习】数据挖掘算法——关联规则(三