關聯規則算法(The Apriori algorithm)詳解


一、前言

  在學習The Apriori algorithm算法時,參考了多篇博客和一篇論文,盡管這些都是很優秀的文章,但是並沒有一篇文章詳解了算法的整個流程,故整理多篇文章,並加入自己的一些注解,有了下面的文章。大部分應該是copy各篇博客和翻譯了論文的重要知識。

 

  關聯規則的目的在於在一個數據集中找出項之間的關系,也稱之為購物藍分析 (market basket analysis)。例如,購買鞋的顧客,有10%的可能也會買襪子,60%的買面包的顧客,也會買牛奶。這其中最有名的例子就是"尿布和啤酒"的故事了。

 

二、重要概念

  首先我們來看,什么是規則?規則形如"如果…那么…(If…Then…)",前者為條件,后者為結果。例如一個顧客,如果買了可樂,那么他也會購買果汁。

  如何來度量一個規則是否夠好?有兩個量,置信度(Confidence)和支持度(Support)。假設有如下表的購買記錄。

顧客

項目

1

orange juice, coke

2

milk, orange juice, window cleaner

3

orange juice, detergent

4

orange juice, detergent, coke

5

window cleaner

 

 

 

 

 

 

 

 

 

將上表整理一下,得到如下的一個2維表

 

  

Orange

Win Cl

Milk

Coke

Detergent

Orange

4

1

1

2

2

WinCl

1

2

1

0

0

Milk

1

1

1

0

0

Coke

2

0

0

2

1

Detergent

1

0

0

0

2

 

 

 

 

 

 

 

 

 

上表中橫欄和縱欄的數字表示同時購買這兩種商品的交易條數。如購買有Orange的交易數為4,而同時購買Orange和Coke的交易數為2。

 

置信度表示了這條規則有多大程度上值得可信。設條件的項的集合為A,結果的集合為B。置信度計算在A中,同時也含有B的概率。即Confidence(A==>B)=P(B|A)。例 如計算"如果Orange則Coke"的置信度。由於在含有Orange的4條交易中,僅有2條交易含有Coke.其置信度為0.5。

 

支持度計算在所有的交易集中,既有A又有B的概率。例如在5條記錄中,既有Orange又有Coke的記錄有2條。則此條規則的支持度為2/5=0.4。現在這條規則可表述為,如果一個顧客購買了Orange,則有50%的可能購買Coke。而這樣的情況(即買了Orange會再買Coke)會有40%的可能發生。

 

三、算法的原理和過程

  首先找出所有的頻集,這些項集出現的頻繁性至少和預定義的最小支持度一 樣。然后由頻集產生強關聯規則,這些規則必須滿足最小支持度和最小可信度。然后使用第1步找到的頻集產生期望的規則,產生只包含集合的項的所有規則,其中 每一條規則的右部只有一項。

  接下來是如何生成頻繁集。

  最出名的關聯規則挖掘算法是Apriori算法,它主要利用了向下封閉屬性:如果一個項集是頻繁項目集,那么它的非空子集必定是頻繁項目集。即頻繁集的子集也一定是頻繁集。比如,如果{A,B,C}是一個3項的頻繁集,則其子集{A,B},{B,C},{A,C}也一定是2項的頻繁集。它先生成1-頻繁項目集,再利用1-頻繁項目集生成2-頻繁項目集。。。然后根據2-頻繁項目集生成3-頻繁項目集。。。依次類推,直至生成所有的頻繁項目集,然后從頻繁項目集中找出符合條件的關聯規則。

  生成一個頻繁集的步驟分聯合和剪枝兩步。

  1、聯合,偽代碼如下:

  

  其中Lk-1為頻繁集。合並只有一個元素不同的item,如(1,2,3)、(1,3,7)和(1、4、9),就會是(1,2,3)和(1,3,7)合並成(1,2,3,7),而不會其他的合並,因為其他情況,兩元素有不只一個元素不同。

  2、剪枝

  合並后的集合,如果有子集不在原集合中,則把該合並集合刪除。例如:

  有2-頻繁項目集

  {1,2},{1,3},{1,4},{2,3},{2,4}

  因為{1,2},{1,3},{1,4}除了最后一個元素以外都相同,所以求{1,2},{1,3}的並集得到{1,2,3}, {1,2}和{1,4}的並集得到{1,2,4},{1,3}和{1,4}的並集得到{1,3,4}。但是由於{1,3,4}的子集{3,4}不在2-頻繁項目集中,所以需要把{1,3,4}剔除掉。

 

  在生成了最大頻繁集后,如何生成強規則呢?

  對於最大頻繁集L,找出L的所有的非空集合。對於每個子集合a,生成如下規則a=>(L-a),然后根據最小支持度和置信度篩選所有規則。

 

下面舉例說明Apiori算法的具體流程:

   假如有項目集合I={1,2,3,4,5},有事務集T:

1,2,3
1,2,4
1,3,4
1,2,3,5
1,3,5
2,4,5
1,2,3,4

  設定minsup=3/7,misconf=5/7。

  首先:生成頻繁項目集:

  1-頻繁項目集:{1},{2},{3},{4},{5}

  生成2-頻繁項目集:

  根據1-頻繁項目集生成所有的包含2個元素的項目集:任意取兩個只有最后一個元素不同的1-頻繁項目集,求其並集,由於每個1-頻繁項目集元素只有一個,所以生成的項目集如下:

  {1,2},{1,3},{1,4},{1,5}

  {2,3},{2,4},{2,5}

  {3,4},{3,5}

  {4,5}

  計算它們的支持度,發現只有{1,2},{1,3},{1,4},{2,3},{2,4},{2,5}的支持度滿足要求,因此求得2-頻繁項目集:

  {1,2},{1,3},{1,4},{2,3},{2,4}

  生成3-頻繁項目集:

  因為{1,2},{1,3},{1,4}除了最后一個元素以外都相同,所以求{1,2},{1,3}的並集得到{1,2,3}, {1,2}和{1,4}的並集得到{1,2,4},{1,3}和{1,4}的並集得到{1,3,4}。但是由於{1,3,4}的子集{3,4}不在2-頻繁項目集中,所以需要把{1,3,4}剔除掉。然后再來計算{1,2,3}和{1,2,4}的支持度,發現{1,2,3}的支持度為3/7 ,{1,2,4}的支持度為2/7,所以需要把{1,2,4}剔除。同理可以對{2,3},{2,4}求並集得到{2,3,4} ,但是{2,3,4}的支持度不滿足要求,所以需要剔除掉。

  因此得到3-頻繁項目集:{1,2,3}。

  到此頻繁項目集生成過程結束。注意生成頻繁項目集的時候,頻繁項目集中的元素個數最大值為事務集中事務中含有的最大元素個數,即若事務集中事務包含的最大元素個數為k,那么最多能生成k-頻繁項目集,這個原因很簡單,因為事務集合中的所有事務都不包含(k+1)個元素,所以不可能存在(k+1)-頻繁項目集。在生成過程中,若得到的頻繁項目集個數小於2,生成過程也可以結束了。

  現在需要生成強關聯規則:

  這里只說明3-頻繁項目集生成關聯規則的過程:

  對於集合{1,2,3}

  先生成1-后件的關聯規則:

  (1,2)—>3,   置信度=3/4

  (1,3)—>2, 置信度=3/5

  (2,3)—>1      置信度=3/3

  (1,3)—>2的置信度不滿足要求,所以剔除掉。因此得到1后件的集合{1},{3},然后再以{1,3}作為后件

       2—>1,3       置信度=3/5不滿足要求,所以對於3-頻繁項目集生成的強關聯規則為:(1,2)—>3和(2,3)—>1。

 

四、參考文獻

  淺談數據挖掘中的關聯規則挖掘

  關聯規則(apriori algorithm)(1)

  Fast Algorithms for Mining Association Rules

  Mining Generalized Association Rules


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM