挖掘關聯規則——Apriori算法

1.現實需求:購物籃分析

       超市經理想知道顧客的購物習慣,如顧客在一次購物時會同時購買哪些商品,也就是要發現不同商品之間的關聯,典型案例是“尿布與啤酒”。

       關聯規則挖掘的目標是發現數據項集之間的關聯關係或相關關係。

2.關聯規則的基本概念

定義1:項與項集
項:數據庫中不可分割的最小單位信息,用i表示,如商品中的尿布、啤酒等。
項集:項的集合,用下式表示


I中項目個數爲k,則稱集合I爲k-項集,如商品組合{尿布,啤酒,牛奶}。

定義2:事務
是所有項構成的集合,可以稱爲全項集,而I的子集對應一個事務,如顧客買了{尿布,啤酒},這個子項集對應一個事務。

定義3:項集的頻數
包含某項集的事務數量稱爲該項集的頻數(支持度計數)。

定義4:關聯規則
形如 的表達式,X、Y是I的真子集,且滿足X∩Y=∅
X爲規則的前提,Y爲規則的結果,表示X中出現的項出現時,Y中的項也跟着出現的規律。如顧客購買了尿布和啤酒,尿布 啤酒存在的關聯規則。

定義5:關聯規則的支持度

反映了X和Y中所含的項在事務集中同時出現的頻率。

定義6:關聯規則的置信度

置信度反映包含X的事務中,出現Y的條件概率。

定義7:最小支持度與最小置信度
用戶爲了達到一定要求,關聯規則需要滿足指定的支持度和置信度閾值。
分別大於等於各自閾值時,認爲關聯規則有趣的。
這兩個閾值稱爲最小支持度閾值(min_sup)、最小置信度閾值(min_conf)。
min_sup描述了關聯規則的最低重要程度,min_conf規定了關聯規則必須滿足的最低可靠性。

定義8:頻繁項集
項集 ,給定最小支持度min_sup,如果項集U的支持度

稱U爲頻繁項集,否則爲非頻繁項集。

定義9:強關聯規則

爲強關聯規則,否則爲弱關聯規則。

關聯規則中最重要的參數是:支持度置信度

3.關聯規則的挖掘過程

總的來講,關聯規則的挖掘過程分兩步:

  • 第一步,找出所有的頻繁項集;
  • 第二步,由頻繁項集產生強關聯規則。

實現過程結合具體實例來講解。

下表爲數據庫事務列表D,在數據庫中,有9筆商品交易(即9項事務),每個交易都用不同的標識符TID代表。

                                                                                               數據庫事務列表D

交易(事務TID

商品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

仔細觀察,會發現:

  • 所有的項包括:I1, I2, I3, I4, I5;
  • 交易集合中的項是按字典順序存放的,這一點很重要,可以減少很多麻煩,提高算法的效率。

同時,我們假設最小支持度計數爲2,即min_sup=2。

⑴第一次掃描數據集D(初始化掃描)

①得到所有項(1-項集)的支持度計數;

                                                                                          候選1-項集C1

                                                                                                                 C1

項集

支持度計數

{I1}

6

{I2}

7

{I3}

6

{I4}

2

{I5}

2

支持度計數就是該項集在9個事務中出現的次數(該項集爲各事務項集的子集)。

②各支持度計數與最小支持度計數比較,得到頻繁1-項集L1。

                                                                                           頻繁1-項集L1

                                                                                                                  L1

項集

支持度計數

{I1}

6

{I2}

7

{I3}

6

{I4}

2

{I5}

2

⑵第二次掃描

主要目的是找到頻繁2-項集。

①L1執行連接操作L1⋈L1,產生候選2-項集C2'。

連接操作就是L1中的各項集按照字典順序進行組合,且每個新組合項集的項個數比原先多1個。L1連接操作形成的候選項集C2’如下表:

C2’

項集

{I1, I2}

{I1, I3}

{I1, I4}

{I1, I5}

{I2, I3}

{I2, I4}

{I2, I5}

{I3, I4}

{I3, I5}

{I4, I5}

 

②對C2'進行剪枝操作:這一步的目的是壓縮C2’,減少計算量,最終得到候選2-項集C2。

剪枝操作的理論基礎是所謂的Apriori性質(先驗性質):

                                           任何非頻繁的(k-1)項集都不可能是頻繁k項集的子集。

也就是說,如果一個候選k項集的(k-1)項子集不在L(k-1)中,則該候選k項集不可能是頻繁的,從而可以從候選k項集Ck中刪除。

在這裏,對C2’中各項集的1項子集,判斷是否在頻繁1-項集L1中,很顯然都在,所以C2中沒有項集在剪枝步中被刪除。

計算剪枝後的項集C2及其支持度:

                                                                                                                        C2

項集

支持度計數

{I1, I2}

4

{I1, I3}

4

{I1, I4}

1

{I1, I5}

2

{I2, I3}

4

{I2, I4}

2

{I2, I5}

2

{I3, I4}

0

{I3, I5}

1

{I4, I5}

0

③C2各項集支持度計數與最小支持度計數比較,刪除小於最小支持度計數的項集,得到頻繁2-項集L2。

                                                                                                                        L2

項集

支持度計數

{I1, I2}

4

{I1, I3}

4

{I1, I5}

2

{I2, I3}

4

{I2, I4}

2

{I2, I5}

2

⑶第三次掃描

主要目的是獲得頻繁3-項集。

①連接操作:L2⋈L2,產生候選3-項集C3’。

C3’

項集

{I1, I2, I3}

{I1, I2, I5}

{I1, I3, I5}

{I2, I3, I4}

{I2, I3, I5}

{I2, I4, I5}

②剪枝操作:使用先驗性質,檢驗各候選3-項集的所有2項子集是否爲2-頻繁項集。經檢查,C3’中{I1, I3, I5}、{I2, I3, I4}、{I2, I3, I5}、{I2, I4, I5}不滿足先驗性質,刪除後得到項集C3,並計算剩下項集的支持度計數。

                                                                                                                       C3

項集

支持度計數

{I1, I2, I3}

2

{I1, I2, I5}

2

③C3各項集支持度計數與最小支持度計數比較,得到頻繁3-項集L3。

                                                                                                                       L3

項集

支持度計數

{I1, I2, I3}

2

{I1, I2, I5}

2

⑷第四次掃描

①連接操作:

②剪枝操作:連接產生的項集其子集{I2, I3, I5}不是頻繁項集,所以 被刪除,C4=∅ 。於是算法終止,找出了所有的頻繁項集L3。

總結一下,挖掘頻繁項集的過程:

1.初始化掃描

2.循環掃描——連接、剪枝

3.直至候選項集爲空集,程序終止。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章