1. 程式人生 > >R語言使用Apriori規則完成關聯挖掘

R語言使用Apriori規則完成關聯挖掘

說明

關聯挖掘常被用於發現隱藏在事務資料集間的一些有意義的關聯,演算法首先找到所有頻繁項集,然後從這些頻繁項集中生成強規則。Apriori是最為著名的關聯規則挖掘技術。該演算法先找到頻繁個體項集,然後再通過廣度優先搜尋策略生成更大的頻繁項集,直至演算法最後再也找不到新的頻繁集而結束。

操作

載入Groceries,在arules包中使用Apriori演算法進行關聯分析。

data("Groceries")
summary("Groceries")
   Length     Class      Mode 
        1 character character 

呼叫itemFrequencyPlot函式檢驗項集的相關項集頻繁度:

itemFrequencyPlot(Groceries,support = 0.1,cex.names = 0.8,topN = 5)

使用apriori函式找到支援度超過0.01,置信度在0.5以上的關聯規

rules = apriori(Groceries,parameter = list(supp = 0.001,conf = 0.5,target = "rules"))
summary(rules)
set of 5668 rules

rule length distribution (lhs + rhs):sizes
   2    3    4    5    6 
  11 1461
3211 939 46 Min. 1st Qu. Median Mean 3rd Qu. Max. 2.00 3.00 4.00 3.92 4.00 6.00 summary of quality measures: support confidence lift Min. :0.001017 Min. :0.5000 Min. : 1.957 1st Qu.:0.001118 1st Qu.:0.5455 1st Qu.: 2.464 Median :0.001322
Median :0.6000 Median : 2.899 Mean :0.001668 Mean :0.6250 Mean : 3.262 3rd Qu.:0.001729 3rd Qu.:0.6842 3rd Qu.: 3.691 Max. :0.022267 Max. :1.0000 Max. :18.996 mining info: data ntransactions support confidence Groceries 9835 0.001 0.5

檢視前面一部分規則:

inspect(head(rules))
    lhs                    rhs          support     confidence lift    
[1] {honey}             => {whole milk} 0.001118454 0.7333333  2.870009
[2] {tidbits}           => {rolls/buns} 0.001220132 0.5217391  2.836542
[3] {cocoa drinks}      => {whole milk} 0.001321810 0.5909091  2.312611
[4] {pudding powder}    => {whole milk} 0.001321810 0.5652174  2.212062
[5] {cooking chocolate} => {whole milk} 0.001321810 0.5200000  2.035097
[6] {cereals}           => {whole milk} 0.003660397 0.6428571  2.515917

根據置信度對規則進行排序並檢視前面的部分規則:

rules = sort(rules,by = "confidence",decreasing = TRUE)
inspect(head(rules))
    lhs                                           rhs                support     confidence lift    
[1] {rice,sugar}                               => {whole milk}       0.001220132 1          3.913649
[2] {canned fish,hygiene articles}             => {whole milk}       0.001118454 1          3.913649
[3] {root vegetables,butter,rice}              => {whole milk}       0.001016777 1          3.913649
[4] {root vegetables,whipped/sour cream,flour} => {whole milk}       0.001728521 1          3.913649
[5] {butter,soft cheese,domestic eggs}         => {whole milk}       0.001016777 1          3.913649
[6] {citrus fruit,root vegetables,soft cheese} => {other vegetables} 0.001016777 1          5.168156

原理

關聯規則挖掘的目的是找出事務資料庫中項集間的關聯。典型的,關聯規則挖掘的過程包括找到大於最小支援度的項集,然後基於頻繁項集生成置信度大於最小置信度的強規則(例如milk =>bread,顧客購買了牛奶後很可能再同時買麵包)。一個關聯規則可以形式化定義為 X => Y,其中X ,Y都是無關項集。我們可以通過支援度和置信度這兩個值來評估規則的強弱。支援度和置信度這兩個值來評估規則的強弱。支援度表示了某個某個規則在資料集中出現的頻率,而置信度則代表項集X與Y同時出現在個事務中的概率。
由於支援度與置信度僅對判斷規則強弱有效,有時一些高置信度與高支援度的規則可能是冗餘的,因此,我們使用第三個指標——提升度,來評估規則的質量(級別)。從定義上看,提升度代表了項集X與項集Y隨機共現關係上的規則強度。
Apriori是最廣為人知的關聯規則挖掘演算法,它依靠逐層廣度優先策略來生成候選項集,演算法首先逐層的找到所有的頻繁項集(項集支援度大於給定閾值),例如,先找到1-頻繁項集,然後基於1-頻繁項集找到2-頻繁項集,依次遞迴,基於k-頻繁項集生成新的k+1-頻繁項集,直到找不到新的繁榮項集。
最後,通過繁榮項集產生關聯規則。
Groceries資料集,包括了9835事務,被分成169個類別。還有例如最頻繁項集、項集分佈等資訊,也可以使用itemFrequencyPlot函式來繪製支援度超過0.1的五個最步頻繁項。
我們利用演算法找到了支援度大於0.001,置信度大於0.5的規則,並使用summary函式來檢查這些規則的詳細資訊,從輸出的結果可知,使用Apriori演算法獲得了5668個符合條件的規則。我們還進一步獲取了有關規則長度的分佈情況,質量評估資訊,挖掘結果等。
從質量評估結果可以得到三類指標,分別是支援度,置信度,提升度。其中,支援度代表了特定項集在事務資料庫中所佔的比例,置信度是規則的正確率,而提升度代表了響應目標關聯規則與平均響應的比值。
可以使用inspect函式來檢視部分規則,5668個規則中的前6個,最後我們可以對些規則進行依據置信度大小排序,並將置信度最高的那些規則列表顯示出來。我們發現糖與全脂牛奶的關聯度最強,支援度為0.001220132.置信度為1,提升度達到3.913649。