Apriori算法简介---关联规则的频繁项集算法
由啤酒和尿布引出:
在一家超市中,人們發(fā)現(xiàn)了一個(gè)特別有趣的現(xiàn)象:尿布與啤酒這兩種風(fēng)馬牛不相及的商品居然擺在一起。但這一奇怪的舉措居然使尿布和啤酒的稍量大幅增加了。這可不是一個(gè)笑話,而是一直被商家所津津樂(lè)道的發(fā)生在美國(guó)沃爾瑪連鎖超市的真實(shí)案例。原來(lái),美國(guó)的婦女通常在家照顧孩子,所以她們經(jīng)常會(huì)囑咐丈夫在下班回家的路上為孩子買尿布,而丈夫在買尿布的同時(shí)又會(huì)順手購(gòu)買自己愛(ài)喝的啤酒。這個(gè)發(fā)現(xiàn)為商家?guī)?lái)了大量的利潤(rùn),但是如何從浩如煙海卻又雜亂無(wú)章的數(shù)據(jù)中,發(fā)現(xiàn)啤酒和尿布銷售之間的聯(lián)系呢?這又給了我們什么樣的啟示呢?這是怎么做到的呢,這就是數(shù)據(jù)的挖掘,需要對(duì)數(shù)據(jù)之間的關(guān)聯(lián)規(guī)則進(jìn)行分析,進(jìn)行購(gòu)物籃分析。
Apriori算法是一種挖掘關(guān)聯(lián)規(guī)則的頻繁項(xiàng)集算法,其核心思想是通過(guò)候選集生成和情節(jié)的向下封閉檢測(cè)兩個(gè)階段來(lái)挖掘頻繁項(xiàng)集。而且算法已經(jīng)被廣泛的應(yīng)用到商業(yè)、網(wǎng)絡(luò)安全等各個(gè)領(lǐng)域。
Apriori算法是一種最有影響的挖掘布爾關(guān)聯(lián)規(guī)則頻繁項(xiàng)集的算法。很多的的挖掘算法是在Apriori算法的基礎(chǔ)上進(jìn)行改進(jìn)的,比如基于散列(Hash)的方法,基于數(shù)據(jù)分割(Partition)的方法以及不產(chǎn)生候選項(xiàng)集的FP-GROWTH方法等。因此要了解關(guān)聯(lián)規(guī)則算法不得不先要了解Apriori算法。
Apriori算法是一種最有影響的挖掘布爾關(guān)聯(lián)規(guī)則頻繁項(xiàng)集的算法。其核心是基于兩階段頻集思想的遞推算法。該關(guān)聯(lián)規(guī)則在分類上屬于單維、單層、布爾關(guān)聯(lián)規(guī)則。在這里,所有支持度大于最小支持度的項(xiàng)集稱為頻繁項(xiàng)集,簡(jiǎn)稱頻集。可能產(chǎn)生大量的候選集,以及可能需要重復(fù)掃描數(shù)據(jù)庫(kù),是Apriori算法的兩大缺點(diǎn)
頻繁項(xiàng)集:
項(xiàng)的集合稱為項(xiàng)集。包含k個(gè)項(xiàng)的項(xiàng)集稱為k-項(xiàng)集。集合{computer,ativirus_software}是一個(gè)二項(xiàng)集。項(xiàng)集的出項(xiàng)頻率是包含項(xiàng)集的事務(wù)數(shù),簡(jiǎn)稱為項(xiàng)集的頻率,支持度計(jì)數(shù)或計(jì)數(shù)。注意,定義項(xiàng)集的支持度有時(shí)稱為相對(duì)支持度,而出現(xiàn)的頻率稱為絕對(duì)支持度。如果項(xiàng)集I的相對(duì)支持度滿足預(yù)定義的最小支持度閾值,則I是頻繁項(xiàng)集。
布爾關(guān)聯(lián)規(guī)則:
關(guān)聯(lián)規(guī)則是形如X→Y的蘊(yùn)涵式,其中且, X和Y分別稱為關(guān)聯(lián)規(guī)則的先導(dǎo)(antecedent或left-hand-side, LHS)和后繼(consequent或right-hand-side, RHS) 。
定義
根據(jù)韓家煒等觀點(diǎn),關(guān)聯(lián)規(guī)則定義為: 假設(shè)I是項(xiàng)的集合。給定一個(gè)交易數(shù)據(jù)庫(kù)D,其中每個(gè)事務(wù)(Transaction)t是I的非空子集,即,每一個(gè)交易都與一個(gè)唯一的標(biāo)識(shí)符TID(Transaction ID)對(duì)應(yīng)。關(guān)聯(lián)規(guī)則在D中的支持度(support)是D中事務(wù)同時(shí)包含X、Y的百分比,即概率;置信度(confidence)是D中事物已經(jīng)包含X的情況下,包含Y的百分比,即條件概率。如果滿足最小支持度閾值和最小置信度閾值。這些閾值是根據(jù)挖掘需要人為設(shè)定。 基本概念表1:關(guān)聯(lián)規(guī)則的簡(jiǎn)單例子
| TID | 網(wǎng)球拍 | 網(wǎng) 球 | 運(yùn)動(dòng)鞋 | 羽毛球 |
| 1 | 1 | 1 | 1 | 0 |
| 2 | 1 | 1 | 0 | 0 |
| 3 | 1 | 0 | 0 | 0 |
| 4 | 1 | 0 | 1 | 0 |
| 5 | 0 | 1 | 1 | 1 |
| 6 | 1 | 1 | 0 | 0 |
1.?挖掘關(guān)聯(lián)規(guī)則
1.1???什么是關(guān)聯(lián)規(guī)則
一言蔽之,關(guān)聯(lián)規(guī)則是形如X→Y的蘊(yùn)涵式,表示通過(guò)X可以推導(dǎo)“得到”Y,其中X和Y分別稱為關(guān)聯(lián)規(guī)則的先導(dǎo)(antecedent或left-hand-side, LHS)和后繼(consequent或right-hand-side, RHS)
1.2???如何量化關(guān)聯(lián)規(guī)則
關(guān)聯(lián)規(guī)則挖掘的一個(gè)典型例子便是購(gòu)物車分析。通過(guò)關(guān)聯(lián)規(guī)則挖掘能夠發(fā)現(xiàn)顧客放入購(gòu)物車中的不同商品之間的關(guān)聯(lián),分析顧客的消費(fèi)習(xí)慣。這種關(guān)聯(lián)規(guī)則的方向能夠幫助賣家了解哪些商品被顧客頻繁購(gòu)買,從而幫助他們開(kāi)發(fā)更好的營(yíng)銷策略。比如:將經(jīng)常同時(shí)購(gòu)買的商品擺近一些,以便進(jìn)一步刺激這些商品一起銷售;或者,將兩件經(jīng)常同時(shí)購(gòu)買的商品擺遠(yuǎn)一點(diǎn),這樣可能誘發(fā)買這兩件商品的用戶一路挑選其他商品。
在數(shù)據(jù)挖掘當(dāng)中,通常用“支持度”(support)和“置性度”(confidence)兩個(gè)概念來(lái)量化事物之間的關(guān)聯(lián)規(guī)則。它們分別反映所發(fā)現(xiàn)規(guī)則的有用性和確定性。
對(duì)于A->B
①支持度:P(A ∩ B),既有A又有B的概率
②置信度:
P(B|A),在A發(fā)生的事件中同時(shí)發(fā)生B的概率 p(AB)/P(A) ? ? 例如購(gòu)物籃分析:牛奶 ? 面包
例子:[支持度:3%,置信度:40%]
支持度3%:意味著3%顧客同時(shí)購(gòu)買牛奶和面包
置信度40%:意味著購(gòu)買牛奶的顧客40%也購(gòu)買面包
比如:
Computer => antivirus_software ,?其中?support=2%, confidence=60%
表示的意思是所有的商品交易中有2%的顧客同時(shí)買了電腦和殺毒軟件,并且購(gòu)買電腦的顧客中有60%也購(gòu)買了殺毒軟件。在關(guān)聯(lián)規(guī)則的挖掘過(guò)程中,通常會(huì)設(shè)定最小支持度閾值和最小置性度閾值,如果某條關(guān)聯(lián)規(guī)則滿足最小支持度閾值和最小置性度閾值,則認(rèn)為該規(guī)則可以給用戶帶來(lái)感興趣的信息。
1.3???關(guān)聯(lián)規(guī)則挖掘過(guò)程
1)幾個(gè)基本概念:
關(guān)聯(lián)規(guī)則A->B的支持度support=P(AB),指的是事件A和事件B同時(shí)發(fā)生的概率。
置信度confidence=P(B|A)=P(AB)/P(A),指的是發(fā)生事件A的基礎(chǔ)上發(fā)生事件B的概率。
同時(shí)滿足最小支持度閾值和最小置信度閾值的規(guī)則稱為強(qiáng)規(guī)則。
如果事件A中包含k個(gè)元素,那么稱這個(gè)事件A為k項(xiàng)集,并且事件A滿足最小支持度閾值的事件稱為頻繁k項(xiàng)集。
2)挖掘過(guò)程:
第一,找出所有的頻繁項(xiàng)集;
第二,由頻繁項(xiàng)集產(chǎn)生強(qiáng)規(guī)則。
2.?什么是Apriori
2.1???Apriori介紹
Apriori算法使用頻繁項(xiàng)集的先驗(yàn)知識(shí),使用一種稱作逐層搜索的迭代方法,k項(xiàng)集用于探索(k+1)項(xiàng)集。首先,通過(guò)掃描事務(wù)(交易)記錄,找出所有的頻繁1項(xiàng)集,該集合記做L1,然后利用L1找頻繁2項(xiàng)集的集合L2,L2找L3,如此下去,直到不能再找到任何頻繁k項(xiàng)集。最后再在所有的頻繁集中找出強(qiáng)規(guī)則,即產(chǎn)生用戶感興趣的關(guān)聯(lián)規(guī)則。
其中,Apriori算法具有這樣一條性質(zhì):任一頻繁項(xiàng)集的所有非空子集也必須是頻繁的。因?yàn)榧偃?span lang="en-us">P(I)<?最小支持度閾值,當(dāng)有元素A添加到I中時(shí),結(jié)果項(xiàng)集(A∩I)不可能比I出現(xiàn)次數(shù)更多。因此A∩I也不是頻繁的。
2.2??連接步和剪枝步1)??連接步
若有兩個(gè)k-1項(xiàng)集,每個(gè)項(xiàng)集按照“屬性-值”(一般按值)的字母順序進(jìn)行排序。如果兩個(gè)k-1項(xiàng)集的前k-2個(gè)項(xiàng)相同,而最后一個(gè)項(xiàng)不同,則證明它們是可連接的,即這個(gè)k-1項(xiàng)集可以聯(lián)姻,即可連接生成k項(xiàng)集。使如有兩個(gè)3項(xiàng)集:{a, b, c}{a, b, d},這兩個(gè)3項(xiàng)集就是可連接的,它們可以連接生成4項(xiàng)集{a, b, c, d}。又如兩個(gè)3項(xiàng)集{a, b, c}{a, d, e},這兩個(gè)3項(xiàng)集顯示是不能連接生成3項(xiàng)集的。
剪枝步 若一個(gè)項(xiàng)集的子集不是頻繁項(xiàng)集,則該項(xiàng)集肯定也不是頻繁項(xiàng)集。這個(gè)很好理解,舉一個(gè)例子,若存在3項(xiàng)集{a, b, c},如果它的2項(xiàng)子集{a, b}的支持度即同時(shí)出現(xiàn)的次數(shù)達(dá)不到閾值,則{a, b, c}同時(shí)出現(xiàn)的次數(shù)顯然也是達(dá)不到閾值的。因此,若存在一個(gè)項(xiàng)集的子集不是頻繁項(xiàng)集,那么該項(xiàng)集就應(yīng)該被無(wú)情的舍棄。 Apriori算法流程: 1. 過(guò)單趟掃描數(shù)據(jù)庫(kù)D;計(jì)算出各個(gè)1項(xiàng)集的支持度,得 到頻繁1項(xiàng)集的集合。
2. 從2項(xiàng)集開(kāi)始循環(huán),由頻繁k-1項(xiàng)集生成頻繁頻繁k項(xiàng)集。
???? ?2.1? 連接步:為了生成,預(yù)先生成,由2個(gè)只有一個(gè)項(xiàng)不同的屬于的頻集做一 個(gè)(k-2)JOIN運(yùn)算得到的。
?? ?2.2? 剪枝步:由于是的超集,所以可能有些元素不是頻繁的。舍棄掉子集不是頻繁項(xiàng)集即不在頻繁k-1項(xiàng)集中的項(xiàng)集
?? ?2.3? 掃描數(shù)據(jù)庫(kù),計(jì)算2.3步中過(guò)濾后的k項(xiàng)集的支持度,舍棄掉支持度小于閾值的項(xiàng)集,生成頻繁k項(xiàng)集。
3.? 當(dāng)當(dāng)前生成的頻繁k項(xiàng)集中只有一個(gè)項(xiàng)集時(shí)循環(huán)結(jié)束
【注意】在剪枝步中的每個(gè)元 素需在交易數(shù)據(jù)庫(kù)中進(jìn)行驗(yàn)證來(lái)決定其是否加入,這里的驗(yàn)證過(guò)程 是算法性能的一個(gè)瓶頸。這個(gè)方法要求多次掃描可能很大的交易數(shù)據(jù)庫(kù)。可能產(chǎn)生大量的候選集,以及可能需要重復(fù)掃描數(shù)據(jù)庫(kù),是Apriori算法的兩大缺 點(diǎn)。
???Apriori算法實(shí)例
| 交易ID | 商品ID列表 |
| T100 | I1,I2,I5 |
| T200 | I2,I4 |
| T300 | I2,I3 |
| T400 | I1,I2,I4 |
| T500 | I1,I3 |
| T600 | I2,I3 |
| T700 | I1,I3 |
| T800 | I1,I2,I3,I5 |
| T900 | I1,I2,I3 |
上圖為某商場(chǎng)的交易記錄,共有9個(gè)事務(wù),利用Apriori算法尋找所有的頻繁項(xiàng)集的過(guò)程如下:
詳細(xì)介紹下候選3項(xiàng)集的集合C3的產(chǎn)生過(guò)程:從連接步,首先C3={{I1,I2,I3},{I1,I2,I5},{I1,I3,I5},{I1,I2,I4},{I2,I3,I4},{I2,I3,I5},{I2,I4,I5}}(C3是由L2與自身連接產(chǎn)生)。根據(jù)Apriori性質(zhì),頻繁項(xiàng)集的所有子集也必須頻繁的,可以確定有4個(gè)候選集{I1,I3,I5},{I2,I3,I4},{I2,I3,I5},{I2,I4,I5}}不可能時(shí)頻繁的,因?yàn)樗鼈兇嬖谧蛹粚儆陬l繁集,因此將它們從C3中刪除。注意,由于Apriori算法使用逐層搜索技術(shù),給定候選k項(xiàng)集后,只需檢查它們的(k-1)個(gè)子集是否頻繁。
又如:3、總結(jié)與優(yōu)化
??①Apriori算法的缺點(diǎn):(1)由頻繁k-1項(xiàng)集進(jìn)行自連接生成的候選頻繁k項(xiàng)集數(shù)量巨大。(2)在驗(yàn)證候選頻繁k項(xiàng)集的時(shí)候需要對(duì)整個(gè)數(shù)據(jù)庫(kù)進(jìn)行掃描,非常耗時(shí)。
??②網(wǎng)上提到的頻集算法的幾種優(yōu)化方法:1.?基于劃分的方法。2.?基于hash的方法。3.?基于采樣的方法。4.?減少交易的個(gè)數(shù)。
???我重點(diǎn)看了“基于劃分的方法”改進(jìn)算法,現(xiàn)在簡(jiǎn)單介紹一下實(shí)現(xiàn)思想:
基于劃分(partition)的算法,這個(gè)算法先把數(shù)據(jù)庫(kù)從邏輯上分成幾個(gè)互不相交的塊,每次單獨(dú)考慮一個(gè)分塊并?對(duì)它生成所有的頻集,然后把產(chǎn)生的頻集合并,用來(lái)生成所有可能的頻集,最后計(jì)算這些項(xiàng)集的支持度。
其中,partition算法要注意的是分片的大小選取,要保證每個(gè)分片可以被放入到內(nèi)存。當(dāng)每個(gè)分片產(chǎn)生頻集后,再合并產(chǎn)生產(chǎn)生全局的候選k-項(xiàng)集。若在多個(gè)處理器分片,可以通過(guò)處理器之間共享一個(gè)雜湊樹來(lái)產(chǎn)生頻集。
轉(zhuǎn)自:http://blog.csdn.net/lizhengnanhua/article/details/9061755 http://blog.csdn.net/qustdjx/article/details/12770883總結(jié)
以上是生活随笔為你收集整理的Apriori算法简介---关联规则的频繁项集算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PCB设计中频率与波长的对应值
- 下一篇: 富士 XF30mm F2.8 微距镜头