關聯規則
1 關聯規則
關聯規則挖掘的目的是在數據項目中找出所有的並發關系,除了基本Aprioris算法,還有一些常用的改進算法,例如多最小支持度的關聯規則挖掘,分類關聯規則挖掘。
Aprioris算法基於演繹原理(或稱為向下封閉屬性)來高效地產生所有頻繁項目集。算法基於逐級搜索的思想,它采用多輪搜索的方法,每一輪搜索掃描一遍整個數據集,並最終生成所有的頻繁項目集合。
多最小支持度算法簡稱為"MS-Apriori算法",它通過對項目集合中的項目基於最小項目支持度值來進行升序排序。該算法也是基於逐級搜索的,通過多次遍歷數據之后產生所有頻繁項目集。
分類關聯規則挖掘(Class Association Rules,CAR)和一般的關聯規則有兩點不同,第一點是:CAR的后件只有一個項目,第二點是:CAR的后件只能從分類標識集合中選取。項目集合中的項目都不能作為后件使用,分類標識集合中的項目也不能作為前件使用。
下面通過具體應用說明上述三種關聯規則的應用與差別。
首先給出一個事物集合的例子。
給定最小支持度minsup=30%和最小置信度mincof=80%。通過三種數據挖掘方法,找尋事物集合中的關聯規則。
1.1 Apriori算法
Apriori算法分兩步進行,第一步生成所有頻繁項目集,第二步從頻繁項目集中生成所有可信關聯規則。
1.1.1 生成頻繁項目集過程
(1)在第一輪搜索中,算法計算出所有只包含一個項目的項集在事務中的支持度,並且寫出單項目頻繁項目集(即1-頻繁項目集)。(算法第1-2行)
(每個頻繁項目集后的數字表示這個頻繁項目集的支持計數,在例子中支持度計數大於等於3即可)
-
隨后每一輪搜索都分為三步進行:
-
將算法第(k-1)生成的頻繁項目集集合
作為種子集合產生候選項集集合
,而
中的這些候選項目集都是可能的頻繁項目集。這個過程通過candidate-gen函數完成。
Candidate-gen(候選項集集合
的生成)函數:該函數可以分成兩步:合並和剪枝
合並:這一步將兩個(k-1)-頻繁項目集合並來產生一個可能的k-候選項集c。兩個頻繁項目集的前k-2個項目都是相同的,只有最后一個項目是不同的。隨后c被加入到候選項目集合
中。
剪枝:從合並步中得到的候選項集集合並不是最終的
。該候選項集要滿足向下封閉原理,需要判斷c的所有(k-1)-子集是否都在
中。
-
隨后 算法對整個事務數據庫進行掃描,計算
中每個候選項集c的支持度。(算法5-10行)
-
在本輪搜索的最后,算法計算出
中每個候選項集的支持度,並將符合最小支持度要求的候選項集加入
中。(算法11行)
-
算法最終輸出的是所有頻繁項目集的集合F。
1.1.2 事例生成頻繁項目集的過程
:{{牛肉}:4,{雞肉}:5,{牛奶}:4,{奶酪}:4,{衣服}:3}
:{{牛肉,雞肉},{牛肉,牛奶},{牛肉,奶酪},{牛肉,衣服},......}
:{{牛肉,雞肉}:3,{雞肉,牛奶}:4,{牛肉,奶酪}:3,{雞肉,衣服}:3,{衣服,牛奶}:3}
:{{雞肉,衣服,牛奶}}
:{{雞肉,衣服,牛奶}:3}
1.1.3 規則生成的過程
首先,需要明確一點,當給定一個頻繁項目集f時,如果一個關聯規則的后件為a,那么所有以a的任一非空子集為后件的候選規則都是關聯規則。(先前條件)
算法如下:
-
從頻繁項目集f中生成所有后件只有一項的關聯規則。
-
然后利用所有得到的關聯規則和candidate-gen()函數,調用ap-genRules函數生成所有2-后件候選關聯規則,依次類推,同時要滿足先前條件,即1-后件可以組合生成2-后件。
1.1.4 事例規則生成的過程
中的頻繁項目集生成1-后件候選關聯規則:
規則1:雞肉,衣服
牛奶[支持度=3/7,置信度=3/3]
規則2:雞肉,牛奶
衣服[支持度=3/7,置信度=3/4](刪除)
規則3:衣服,牛奶
雞肉[支持度=3/7,置信度=3/3]
中的頻繁項目集生成2-后件候選關聯規則:
規則4:衣服
牛奶,雞肉[支持度=3/7,置信度=3/3]
1.2 MS-Apriori算法
2.1.1 生成頻繁項目集過程
MS-Apriori算法的詳細流程。
算法第1行對I中的所有項目根據項目的MIS值(存儲在MS中)進行排序。
算法第2行調用init-pass()函數對數據進行第一遍遍歷,得到生成
(基數為2的候選項集集合)的種子L。Init-pass函數分為兩步:
- 掃描一遍數據,計算每個項目的支持計數。
-
按存儲順序在M中找出第一個滿足
的項目i,將其加入L中。對於M中i之后的每個項目j,如果
,則將j加入L中。
之后對數據的每一遍遍歷,算法都執行三步操作:
- MScandidate-gen函數利用在第(k-1)輪找到的頻繁項目集集合
生成候選項集集合
。K=2是一個特例,這是候選項集集合的函數為Level2-candidate-gen()。
Level2-candidate-gen函數:函數有一個參數L,返回一個集合,是所有2-頻繁項目集集合的超集。同時要滿足
。
MScandidate-gen函數:函數也分為兩步,合並和剪枝。合並步和candidate-gen()函數一樣。剪枝步則不同。
對於c的每個(k-1)-子集s,如果s不在
中,且s包含c[1],也即c中擁有最低MIS值的項目,則c就能從
中刪除。如果這個s不不包含c[1],則即使s並不在
中,我們也不能把c刪除,因為我們不能斷定s不滿足MIS(c[1])。
- 掃描數據,計算
中各項集的支持計數。對每個候選項集c,算法不僅計算它的支持計數,同時也計算去掉c的第一個項目后的支持計數,也即c-{c[1]},這個數據將在關聯規則的生成階段用到。
注意:在實際應用中,如果不想生成某些頻繁項目集,只需將該頻繁項目集的最小支持度設置為101%。
2.1.2 規則生成的過程
在MS-Apriori算法中,僅僅記錄每個頻繁項目集的支持計數是不夠的。同時我們還要避免頭項目問題的產生,即只有當頻繁項目集中具有最小MIS值的項目處於規則的后件時才會發生頭項目問題。
1.3 分類關聯規則
生成分類關聯規則的算法稱為CAR-Apriori,是基於Apriori算法的。CAR-Apriori算法需要多次遍歷數據來生成所有頻繁項目規則的項。
不同於一般的關聯規則挖掘CAR可以直接一步生成,關鍵的操作是找出所有支持度高於最小支持度閾值的規則項。一個規則項表示為:
(condset,y)
其中condset屬於I是一個項目集合,成為條件集,y屬於Y是一個類標。一個條件集的支持計數表示為condsupCount,是T中包含該條件集的事物的數量,稱為條件集支持計數。一個規則項(condset,y)的支持計數表示為rulesupCount,是T中包含條件集countset且類標為y的事物的數量,稱為規則支持計數。只要滿足最小支持度的規則項都稱為頻繁規則項,其余的都稱為非頻繁規則項。
在第一遍遍歷中,算法計算每個1-規則項的支持計數。所有的1-候選規則項的集合為:
算法第2行決定
中候選1-規則項是否頻繁的。從頻繁1-規則項中,我們生成1-前件CAR。后續的遍歷,以K-1輪生成的頻繁(k-1)-規則項的集合為種子生成k-候選規則項的集合。每個候選k-規則項的真實支持計數,包括condsupCount和rulesupCount,在對事物數據集合的掃描中得到更新。在數據掃描結束后,算法決定
中哪些候選k-規則項是真正頻繁地。與Aprioir算法中唯一的不同是,CARcandidate-gen()中,僅僅將具有相同 分類的規則項通過合並它們的條件集進行合並。
- MScandidate-gen函數利用在第(k-1)輪找到的頻繁項目集集合