R語言之Apriori算法


---恢復內容開始---

1.概念

關聯分析:用於發現隱藏在大型數據集中的有意義的聯系

項集:0或多個項的集合。例如:{啤酒,尿布,牛奶,花生} 是一個4-項集,意義想象成爸爸去超市買啤酒和花生,給兒子和老婆分別買尿布和牛奶。

關聯規則:啤酒->花生,其強度可用支持度和置信度來度量

支持度:一個項集或者規則在所有事物中出現的頻率,即此規則能否普遍運用於給定數據集。σ(X):表示項集X的支持度計數,項集X的支持度:s(X)=σ(X)/N;規則X → Y的支持度:s(X → Y) = σ(X∪Y) / N  

置信度:確定Y在包含X的事務中出現的頻繁程度。c(X → Y) = σ(X∪Y)/σ(X)

支持度是用來判斷規則有沒有意義,刪去無意義規則;置信度度量是通過規則進行推理具有可靠性。對於給定的規則X → Y,置信度越高,Y在包含X的事物中出現的可能性就越大。即Y在給定X下的條件概率P(Y|X)越大。

2.Groceries是arules包自帶的超市經營一個月的購物數據,含9835次交易,9835次/30天/12小時/天=27.3筆/小時->此超市屬於中型超市

2.1數據源

2.2探索和准備數據

1 inspect(Groceries[1:5])   #通過inspect函數查看Groceries數據集的前5次交易記錄
2 itemFrequency(Groceries[,1:3])   #itemFrequency()函數可以查看商品的交易比例<br>frankfurter sausage liver loaf <br>0.058973055 0.093950178 0.005083884
3 summary(Groceries)

交易比例

總體情況

 

2.3可視化商品的支持度——商品的頻率圖

為了直觀地呈現統計數據,可以使用itemFrequenctyPlot()函數生成一個用於描繪所包含的特定商品的交易比例的柱狀圖。因為包含很多種商品,不可能同時展現出來,因此可以通過support或者topN參數進行排除一部分商品進行展示

> itemFrequencyPlot(Groceries,support = 0.1)  # support = 0.1 表示支持度至少為0.1

> itemFrequencyPlot(Groceries,topN = 20)  # topN = 20 表示支持度排在前20的商品

 

 2.4可視化交易數據,繪制稀疏矩陣

1 image(Groceries[1:5]) # 生成一個5行169列的矩陣,矩陣中填充有黑色的單元表示在此次交易(行)中,該商品(列)被購買了

 

從上圖可以看出,第一行記錄(交易)包含了四種商品(黑色的方塊),這種可視化的圖是用於數據探索的一種很有用的工具。它可能有助於識別潛在的數據問題,比如:由於列表示的是商品名稱,如果列從上往下一直被填充表明這個商品在每一次交易中都被購買了;另一方面,圖中的模式可能有助於揭示交易或者商品的有趣部分,特別是當數據以有趣的方式排序后,比如,如果交易按照日期進行排序,那么黑色方塊圖案可能會揭示人們購買商品的數量或者類型受季節性的影響。這種可視化對於超大型的交易數據集是沒有意義的,因為單元太小會很難發現有趣的模式。

 2.5訓練模型

1 grocery_rules <- apriori(data=Groceries,parameter=list(support =0.1,confidence =0.8,minlen =2))

support=0.1意味着商品至少出現在9835*0.1=983.5次交易中(所有買的人中必須有983.5個人購買),在前面的分析中,我們發現只有8種商品的 support >= 0.1,因此使用默認的設置沒有產生任何規則也不足為奇。

minlen = 2 表示規則中至少包含兩種商品,這可以防止僅僅是由於某種商品被頻繁購買而創建的無用規則,比如在上面的分析中,我們發現whole milk出現的概率(支持度)為25.6%,很可能出現如下規則:{}=>whole milk,這種規則是沒有意義的。

1 > grocery_rules=apriori(data=Groceries,parameter=list(support=0.006,confidence=0.25,minlen=2))#此時支持度取我們認為的最小交易數量9835*0.006=60次/月,置信度為25%,
即規則正確率至少為25%,排除了最不可靠的規則

結果如下,創建了463項規則

2.6評估性能

 1 > summary(grocery_rules)
 2 set of 463 rules
 3 
 4 rule length distribution (lhs + rhs):sizes #前件+后件的規則分布  5   2   3   4 
 6 150 297  16  #有150個規則包含2件商品,297個規則包含3件商品,16個規則包含4件商品
 7 
 8    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 9   2.000   2.000   3.000   2.711   3.000   4.000 
10 
11 summary of quality measures:
12     support           confidence          lift            count      
13  Min.   :0.006101   Min.   :0.2500   Min.   :0.9932   Min.   : 60.0  
14  1st Qu.:0.007117   1st Qu.:0.2971   1st Qu.:1.6229   1st Qu.: 70.0  
15  Median :0.008744   Median :0.3554   Median :1.9332   Median : 86.0  
16  Mean   :0.011539   Mean   :0.3786   Mean   :2.0351   Mean   :113.5  
17  3rd Qu.:0.012303   3rd Qu.:0.4495   3rd Qu.:2.3565   3rd Qu.:121.0  
18  Max.   :0.074835   Max.   :0.6600   Max.   :3.9565   Max.   :736.0  
19 
20 mining info:
21       data ntransactions support confidence
22  Groceries          9835   0.006       0.25

 lift(提升度):相對於一般購買率,受前件影響之后,后件的購買率提升了多少,規則解讀見如下:

1 > inspect(grocery_rules[1:5])
2     lhs             rhs                support     confidence lift     count
3 [1] {pot plants} => {whole milk}       0.006914082 0.4000000  1.565460 68   
4 [2] {pasta} => {whole milk} 0.006100661 0.4054054 1.586614 60 5 [3] {herbs} => {root vegetables} 0.007015760 0.4312500 3.956477 69 6 [4] {herbs} => {other vegetables} 0.007727504 0.4750000 2.454874 76 7 [5] {herbs} => {whole milk} 0.007727504 0.4750000 1.858983 76

第一條規則解讀: 

規則:{plot plants}->{whole milk}某顧客買了pot plants后還會購買whole milk; 支持度:該規則涵蓋了0.7%的交易; 置信度:此規則發生的概率是40%;  提升度:相比於單買whole milk,買plot plants后再購買whole miik的可能性提升了1.565倍;1.56=40%的概率/25.6%的顧客,算出來一致

lift>1說明商品一起購買比單買更常見

2.7提高性能

 (1)對關聯規則集合排序
 sort()函數排序,默認降序,decreasing=FALSE反轉排序
 1 > inspect(sort(grocery_rules,by="lift")[1:10])
 2      lhs                   rhs                      support confidence     lift count
 3 [1]  {herbs}            => {root vegetables}    0.007015760  0.4312500 3.956477    69
 4 [2]  {berries}          => {whipped/sour cream} 0.009049314  0.2721713 3.796886    89
 5 [3]  {tropical fruit,                                                                
 6       other vegetables,                                                              
 7       whole milk}       => {root vegetables}    0.007015760  0.4107143 3.768074    69
 8 [4]  {beef,                                                                          
 9       other vegetables} => {root vegetables}    0.007930859  0.4020619 3.688692    78
10 [5]  {tropical fruit,                                                                
11       other vegetables} => {pip fruit}          0.009456024  0.2634561 3.482649    93
12 [6]  {beef,                                                                          
13       whole milk}       => {root vegetables}    0.008032537  0.3779904 3.467851    79
14 [7]  {pip fruit,                                                                     
15       other vegetables} => {tropical fruit}     0.009456024  0.3618677 3.448613    93
16 [8]  {pip fruit,                                                                     
17       yogurt}           => {tropical fruit}     0.006405694  0.3559322 3.392048    63
18 [9]  {citrus fruit,                                                                  
19       other vegetables} => {root vegetables}    0.010371124  0.3591549 3.295045   102
20 [10] {other vegetables,                                                              
21       whole milk,                                                                    
22       yogurt}           => {tropical fruit}     0.007625826  0.3424658 3.263712    75

 

 (2)提取關聯規則的子集:可以通過subset()函數提取我們感興趣的規則
 
 
1 >fruit_rules <- subset(grocery_rules,items %in% "pip fruit")  # items 表明與出現在規則的任何位置的項進行匹配,為了將子集限制到匹配只發生在左側或者右側位置上,可以使用lhs或者rhs代替
2 > inspect(sort(fruit_rules,by="lift")[1:5])
    lhs                                  rhs               support     confidence lift     count
[1] {tropical fruit,other vegetables} => {pip fruit}       0.009456024 0.2634561  3.482649 93  
[2] {pip fruit,other vegetables}      => {tropical fruit}  0.009456024 0.3618677  3.448613 93  
[3] {pip fruit,yogurt}                => {tropical fruit}  0.006405694 0.3559322  3.392048 63  
[4] {pip fruit,other vegetables}      => {root vegetables} 0.008134215 0.3112840  2.855857 80  
[5] {pip fruit,whole milk}            => {root vegetables} 0.008947636 0.2972973  2.727536 88  

 

1 > fruit_rules1=subset(grocery_rules,rhs%in%"pip fruit")
2 > inspect(fruit_rules1)
3     lhs                                  rhs         support     confidence lift     count
4 [1] {tropical fruit,other vegetables} => {pip fruit} 0.009456024 0.2634561  3.482649 93   

 

 


免責聲明!

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



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