關聯規則挖掘(二)-- Apriori 演算法
本文首先介紹了Apriori演算法的原理,進行了簡單的示例推導,而後運用R語言中的arules包對Groceries資料集進行關聯規則挖掘實戰。
一、概述
Apriori演算法是一種最有影響的挖掘布林關聯規則頻繁項集的演算法,這種演算法所針對的關聯規則是單維、單層、布林關聯規則。
在前一篇文章中寫到關聯規則挖掘演算法的總體效能取決於尋找頻繁項集,而後由頻繁項集產生強關聯規則就很容易了。那麼如何尋找頻繁項集呢?自然的想法是對於資料集D,遍歷它的每一條記錄T,得到T的所有子集,然後計算每一個子集的支援度,最後的結果再與最小支援度比較。此種方法的計算量非常巨大,顯然是不可取的。因此,Apriori演算法提出了逐層搜尋的迭代方法:
1.自連線獲取候選集。第一輪的候選集就是資料集D中的項,而其他輪次的候選集則是由前一輪次頻繁集自連線得到(頻繁集由候選集剪枝得到)。
2.對候選集進行剪枝。剪枝規則1:如果某條候選集的支援度小於最小支援度,那麼就會被剪掉;剪枝規則2:如果某條候選集的子集中存在非頻繁集,該候選集也會被剪掉。
值得注意的是,為了提高頻繁項集逐層產生的效率,進一步減少計算量,一種稱作 Apriori 性質的重要性質被用於壓縮搜尋空間,即:頻繁項集的所有非空子集都必須也是頻繁的(對應剪枝規則2)。
二、示例推導
該示例基於某事務資料庫,資料庫中有9個事務,如下圖所示:
如何使用Apriori演算法尋找頻繁項集呢?具體如下:
1.在演算法的第一次迭代,每個項都是候選 1-項集的集合
2.假定最小事務支援計數為 2(即,min_sup = 2/9 = 22%)。可以確定頻繁 1-項集的集合
3.為發現頻繁 2-項集的集合
4.下一步,掃描 D 中事務,計算
5.將候選集支援度計數與最小支援度比較,產生頻繁 2-項集的集合
6.產生候選 3-項集的集合
7.掃描 D 中事務,以確定
8.產生候選 4-項集的集合
三、例項
1.R語言函式介紹
R語言中arules包可以實現Apriori演算法。
apriori apriori函式的用法:
其中parameter引數是一個列表,包含支援度,置信度,和minlen,maxlen即規則包含的元素個數(LHS+RHS),預設的minlen = 1,意味著
2.R語言實戰
本次實戰採用arules包中的資料集Groceries,該資料集來自現實生活中某超市的一個月經營資料。
(1)瞭解資料集
> #下載並載入包
> install.packages("arules")
> library("arules")
> #呼叫資料集,並檢視summary
> data(Groceries)
> summary(Groceries)
transactions as itemMatrix in sparse format with
9835 rows (elements/itemsets/transactions) and
169 columns (items) and a density of 0.02609146
most frequent items:
whole milk other vegetables rolls/buns soda yogurt
2513 1903 1809 1715 1372
(Other)
34055
element (itemset/transaction) length distribution:
sizes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
2159 1643 1299 1005 855 645 545 438 350 246 182 117 78 77 55 46 29
18 19 20 21 22 23 24 26 27 28 29 32
14 14 9 11 4 6 1 1 1 1 3 1
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.000 2.000 3.000 4.409 6.000 32.000
includes extended item information - examples:
labels level2 level1
1 frankfurter sausage meat and sausage
2 sausage sausage meat and sausage
3 liver loaf sausage meat and sausage
summary(Groceries)的解釋:
第一段:該資料集9835條交易記錄,169種交易商品,稀疏矩陣的密度為0.02609146,即所有購物籃的商品總數量為9835*169*0.02609146=43367。
第二段:出現頻率最高的商品為whole milk:2513次,other vegetables:1903次等。
第三段:購物籃裡商品數量,其中只買了一件商品的訂單有2159個,購物籃裡商品最多的有32件商品。
第四段:購物籃裡商品的五數總括和平均數。
第五段:資料集除了商品名稱,還包括其他資訊,在這裡是商品所屬類別level2和level1,level2是小類,level1是大類。
> #進一步檢視資料集資訊
> inspect(Groceries[1:5])
items
[1] {citrus fruit,
semi-finished bread,
margarine,
ready soups}
[2] {tropical fruit,
yogurt,
coffee}
[3] {whole milk}
[4] {pip fruit,
yogurt,
cream cheese ,
meat spreads}
[5] {other vegetables,
whole milk,
condensed milk,
long life bakery product}
> basketsize <- size(Groceries)
> itemfreq <- itemFrequency(Groceries)
解釋:
size函式和itemFrequency函式都是arules包中的函式,前者是為了計算購物籃裡商品數量,後者是為了計算每種商品的支援度。而itemFrequencyPlot則可以畫出條形圖進行展現,如下:
> itemFrequencyPlot(Groceries, support = 0.1)
> itemFrequencyPlot(Groceries, topN = 10)
(2)關聯規則挖掘
為了進行關聯規則挖掘,第一步要根據具體的業務知識設定最小支援度。根據日訂單9835/30=328,時訂單328/12=27,可知該超市為一箇中型超市,我們假設最小支援度為某商品每天至少被購買兩次即2*30/9835=0.006。最小置信度暫定為0.25。
> #提取關聯規則
> rules <- apriori(Groceries,parameter = list(support = 0.006, confidence = 0.25, minlen = 2))
Apriori
Parameter specification:
confidence minval smax arem aval originalSupport maxtime support minlen maxlen target
0.25 0.1 1 none FALSE TRUE 5 0.006 2 10 rules
ext
FALSE
Algorithmic control:
filter tree heap memopt load sort verbose
0.1 TRUE TRUE FALSE TRUE 2 TRUE
Absolute minimum support count: 59
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[169 item(s), 9835 transaction(s)] done [0.00s].
sorting and recoding items ... [109 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 done [0.00s].
writing ... [463 rule(s)] done [0.00s].
creating S4 object ... done [0.00s].
> summary(rules)
set of 463 rules
rule length distribution (lhs + rhs):sizes
2 3 4
150 297 16
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.000 2.000 3.000 2.711 3.000 4.000
summary of quality measures:
support confidence lift count
Min. :0.006101 Min. :0.2500 Min. :0.9932 Min. : 60.0
1st Qu.:0.007117 1st Qu.:0.2971 1st Qu.:1.6229 1st Qu.: 70.0
Median :0.008744 Median :0.3554 Median :1.9332 Median : 86.0
Mean :0.011539 Mean :0.3786 Mean :2.0351 Mean :113.5
3rd Qu.:0.012303 3rd Qu.:0.4495 3rd Qu.:2.3565 3rd Qu.:121.0
Max. :0.074835 Max. :0.6600 Max. :3.9565 Max. :736.0
mining info:
data ntransactions support confidence
Groceries 9835 0.006 0.25
summary(rules)的解釋:
第一段:規則的條數,共有463條規則
第二段:規則長度的分佈,len=2有150條規則,len=3有297,len=4有16。
第三段:規則長度的五數總括和均值。
第四段:支援度、置信度和lift的五數總括和均值。
第五段:挖掘的相關資訊。
(3)評估規則
規則可以劃分為3大類:
- 提供非常清晰、有用的洞察,可以直接應用在業務上。
- 顯而易見,很清晰但是沒啥用,屬於common sense,如 {尿布} => {嬰兒食品}。
- 不清晰,難以解釋,需要額外的研究來判定是否是有用的rule。
那麼,如何發現有用的rules呢?
- 按照某種度量對規則進行排序。
> #按照lift,對規則進行排序
> orderbylift_rules <- sort(rules, by = 'lift')
> inspect(orderbylift_rules[1:5])
lhs rhs support confidence lift count
[1] {herbs} => {root vegetables} 0.007015760 0.4312500 3.956477 69
[2] {berries} => {whipped/sour cream} 0.009049314 0.2721713 3.796886 89
[3] {tropical fruit,
other vegetables,
whole milk} => {root vegetables} 0.007015760 0.4107143 3.768074 69
[4] {beef,
other vegetables} => {root vegetables} 0.007930859 0.4020619 3.688692 78
[5] {tropical fruit,
other vegetables} => {pip fruit} 0.009456024 0.2634561 3.482649 93
- 按照條件搜尋規則
items %in% c(“A”, “B”)表示 lhs+rhs的項集並集中至少有一個item在c(“A”, “B”)中。
如果僅僅想搜尋lhs或者rhs,那麼用lhs或rhs替換items即可。如:lhs %in% c(“yogurt”)。
%in%是精確匹配
%pin%是部分匹配,也就是說只要item like ‘%A%’ or item like ‘%B%’
%ain%是完全匹配,也就是說itemset has ’A’ and itemset has ‘B’
同時可以通過條件運算子(&, |, !) 新增 support, confidence, lift的過濾條件。
> #按條件篩選關聯規則
> subsetrules <- subset(rules, subset = rhs %in% "whole milk" & lift >= 2)
> inspect(sort(subsetrules, by = "support")[1:5])
lhs rhs support confidence lift count
[1] {other vegetables,yogurt} => {whole milk} 0.02226741 0.5128806 2.007235 219
[2] {tropical fruit,yogurt} => {whole milk} 0.01514997 0.5173611 2.024770 149
[3] {root vegetables,yogurt} => {whole milk} 0.01453991 0.5629921 2.203354 143
[4] {pip fruit,other vegetables} => {whole milk} 0.01352313 0.5175097 2.025351 133
[5] {root vegetables,rolls/buns} => {whole milk} 0.01270971 0.5230126 2.046888 125
- 檢視其它的quality measure
這裡一般用到另外兩種測度指標:
coverage:規則左邊的支援度,衡量規則應用的頻率。
chiSquared:卡方統計量,為了檢驗規則的lhs和rhs之間的獨立性。在α= 0.05時,具有1個自由度(2×2列聯表)的卡方分佈的臨界值是3.84;較高的卡方值表明lhs和rhs不是獨立的,也就是該值越大,表示關聯規則越可信。
還有很多種測度指標,具體可以看幫助?interestMeasure。
> #檢視其它的quality measure
> qualityMeasures <- interestMeasure(subsetrules, measure = c("coverage", "chiSquared"), transactions = Groceries)
> summary(qualityMeasures)
coverage chiSquared
Min. :0.009964 Min. : 43.35
1st Qu.:0.011845 1st Qu.: 60.16
Median :0.014642 Median : 73.63
Mean :0.016264 Mean : 77.80
3rd Qu.:0.017743 3rd Qu.: 91.90
Max. :0.043416 Max. :155.43
> quality(subsetrules) <- cbind(quality(subsetrules), qualityMeasures) #將coverage和chiSquared統計量加入到quality(subsetrules)中
> inspect(head(sort(subsetrules, by = "chiSquared")))
lhs rhs support confidence lift count coverage
[1] {other vegetables,yogurt} => {whole milk} 0.022267412 0.5128806 2.007235 219 0.04341637
[2] {root vegetables,yogurt} => {whole milk} 0.014539908 0.5629921 2.203354 143 0.02582613
[3] {butter,yogurt} => {whole milk} 0.009354347 0.6388889 2.500387 92 0.01464159
[4] {tropical fruit,root vegetables} => {whole milk} 0.011997966 0.5700483 2.230969 118 0.02104728
[5] {tropical fruit,yogurt} => {whole milk} 0.015149975 0.5173611 2.024770 149 0.02928317
[6] {other vegetables,butter} => {whole milk} 0.011489578 0.5736041 2.244885 113 0.02003050
chiSquared
[1] 155.4279
[2] 129.5825
[3] 112.9113
[4] 109.9678
[5] 106.9339
[6] 106.9239
(4)將規則寫出
#寫出關聯規則
> write(subsetrules, file="subsetrules.csv", sep=",", quote=TRUE, row.names=FALSE)
說明:本文僅作學習使用。在R語言實戰部分大部分借鑑了博文R語言 | 關聯規則,在此感謝原作者,由於R語言視覺化部分還沒有深入瞭解,所以原文中的進階部分沒有深入探討,有需要的童鞋請看原文。
參考資料:
【1】資料探勘概念與技術
【2】R語言之Apriori演算法應用
【3】R語言 | 關聯規則
相關文章
- 關聯規則挖掘之apriori演算法演算法
- Apriori 演算法-如何進行關聯規則挖掘演算法
- 關聯規則挖掘:Apriori演算法的深度探討演算法
- 關聯規則方法之apriori演算法演算法
- 關聯規則apriori演算法的python實現演算法Python
- 關聯分析(二)--Apriori演算法演算法
- 關聯規則分析 Apriori 演算法 簡介與入門演算法
- 資料探勘演算法之-關聯規則挖掘(Association Rule)演算法
- 【Python資料探勘課程】八.關聯規則挖掘及Apriori實現購物推薦Python
- 機器學習系列文章:Apriori關聯規則分析演算法原理分析與程式碼實現機器學習演算法
- 資料探勘(1):關聯規則挖掘基本概念與Aprior演算法演算法
- 使用apriori演算法進行關聯分析演算法
- 資料探勘(5):使用mahout做海量資料關聯規則挖掘
- 基於Apriori關聯規則的電影推薦系統(附python程式碼)Python
- 關聯分析Apriori演算法和FP-growth演算法初探演算法
- 基於關聯規則的分類演算法演算法
- 【機器學習】--關聯規則演算法從初識到應用機器學習演算法
- 資料探勘之關聯規則
- 直播系統,利用關聯規則實現推薦演算法演算法
- 推薦系統:關聯規則(2)
- Frequent Pattern 資料探勘關聯規則演算法(Aprior演算法) FT-Tree演算法
- 大資料環境下的關聯規則挖掘-趙修湘-專題視訊課程大資料
- Apriori演算法演算法
- 第十四篇:Apriori 關聯分析演算法原理分析與程式碼實現演算法
- 市場購物籃分析(規則歸納/C5.0)+apriori
- Rational Performance Tester 資料關聯規則詳解ORM
- 大資料下的關聯規則,你知多少?大資料
- Apriori演算法原理總結演算法
- Apriori演算法 java程式碼演算法Java
- Apriori演算法的介紹演算法
- 海量文字中挖掘人物關聯關係核心技術介紹
- iOS 不規則Button點選(二)iOS
- 模式識別中的Apriori演算法和FPGrowth演算法模式演算法
- 關於laravel使用自定義驗證規則後某些規則不生效Laravel
- 關於OCLint自定義規則
- 關聯式資料庫分片原則資料庫
- javascript關於toFixed的計算規則JavaScript
- 第八篇.HFM規則入門(二)