关联规则挖掘实践

发布时间:2025-01-11 22:08

参与历史遗址挖掘工作,投身考古实践 #生活乐趣# #日常生活乐趣# #旅行探索乐趣# #历史文化探索#

原文链接

关联规则

       比较项集(Items)之间的相似度的方法有很多种。这些方法属于关联规则这一技术范畴。简单的说,关联规则挖掘的结果是得到一个集合,而集合里的元素类似于A->B(由A推导出B)。

应用

       那么我们关心哪些项目呢?以下是关联规则挖掘的应用:

商品推荐——像Amazon的“买屋及乌”音乐推荐——像Last.fm的歌手推荐医学诊断——像糖尿病内容推荐——像网站或者博客

       本文关注点是关联规则挖掘在零售行业的应用,因为它简单直观。此外,R语言的相关包包含一个零售数据集,你可以通过该数据集来学习关联规则挖掘。

Groceries数据集

       假如你的桌子上有10000张收据。每一张收据表示一次购买商品(一个或者多个)的交易记录。这些收据可以认为是顾客的购物篮。如果对这些收据进行分析,那么这便是超市购物篮分析。

       事实上,Groceries数据集的每一行表示一次交易记录,行中的每一列代表一个商品。你可以下载Groceries数据集来查看数据格式,但是这不是必须的步骤。

数学相关知识

       我们已经讨论过了交易和项集的概念了。
一个项集可以表示为:
I = ( i 1 , i 2 , . . . i n ) I=(i_1,i_2,...i_n) I=(i1​,i2​,...in​)
一次交易可以表示为:
t n = ( i j , i k , . . . i n ) t_n=(i_j,i_k,...i_n) tn​=(ij​,ik​,...in​)
关联规则挖掘可以表示为:
( i 1 , i 2 ) = > ( i k ) (i_1,i_2) => (i_k) (i1​,i2​)=>(ik​)
       该表达式可以理解为,如果顾客购买了表达式左边的项集,那么他可能购买表达式右边的项集。下面是一个更为通俗的例子:
( c o f f e e , s u g a r ) = > ( m i l k ) (coffee,sugar)=> (milk) (coffee,sugar)=>(milk)
如果一个顾客购买了咖啡和糖,那么他可能还会买牛奶。

       由此,我们可以了解下支持度、置信度和lift。下面我们将描述这些值,如果你想知道它们的数学意义,那么你可以查阅维基百科。

支持度:包含指定项集的记录在数据集的占比置信度:由指定项集推导出的规则与该项集之比提升度:由项集推导出的规则的置信度与规则右侧的项集之比
注意:如果提升度等于1,那么该规则的左右两侧的项集是不相关的。

Apriori挖掘

       加载相关包和数据集

# Load the libraries library(arules) library(arulesViz) library(datasets) # Load the data set data(Groceries) 1234567

       在挖掘规则之前探索下数据集

# Create an item frequency plot for the top 20 items itemFrequencyPlot(Groceries,topN=20,type="absolute") 12

在这里插入图片描述
       现在我开始挖掘规则!你必须设置最小支持度和最小置信度。

-最小支持度设置为0.001

最小置信度设置为0.8我们只显示规则中的top5

# Get the rules rules <- apriori(Groceries, parameter = list(supp = 0.001, conf = 0.8)) # Show the top 5 rules, but only 2 digits options(digits=2) inspect(rules[1:5]) 123456

输出如下:

lhs rhs support confidence lift 1 {liquor,red/blush wine} => {bottled beer} 0.0019 0.90 11.2 2 {curd,cereals} => {whole milk} 0.0010 0.91 3.6 3 {yogurt,cereals} => {whole milk} 0.0017 0.81 3.2 4 {butter,jam} => {whole milk} 0.0010 0.83 3.3 5 {soups,bottled beer} => {whole milk} 0.0011 0.92 3.6 123456

       由以上可知,如果客户购买了yogurt和cereals,那么他有81%的概率买whole milk

       我们总结了一些关于规则的信息,这些信息可以为我们提供有趣的内容,例如:

生成规则总数:410条规则的长度分布:大多数规则的长度为4挖掘结果分析:将支持度、置信度和提升度取不同的值挖掘信息:数据总数和最小参数

set of 410 rules rule length distribution (lhs + rhs): sizes 3 4 5 6 29 229 140 12 summary of quality measures: support conf. lift Min. :0.00102 Min. :0.80 Min. : 3.1 1st Qu.:0.00102 1st Qu.:0.83 1st Qu.: 3.3 Median :0.00122 Median :0.85 Median : 3.6 Mean :0.00125 Mean :0.87 Mean : 4.0 3rd Qu.:0.00132 3rd Qu.:0.91 3rd Qu.: 4.3 Max. :0.00315 Max. :1.00 Max. :11.2 mining info: data n support confidence Groceries 9835 0.001 0.8

123456789101112131415161718

排序

       通过观察发现,挖掘出的规则是没有排序的。我们总是想要最相关的规则。或者说,我们想要最可能发生的规则。通过以下代码就可以实现根据置信度将规则排序:

rules<-sort(rules, by="confidence", decreasing=TRUE) 1

       现在我们输出了根据置信度排序后的最相关的前5条规则

lhs rhs support conf. lift 1 {rice,sugar} => {whole milk} 0.0012 1 3.9 2 {canned fish,hygiene articles} => {whole milk} 0.0011 1 3.9 3 {root vegetables,butter,rice} => {whole milk} 0.0010 1 3.9 4 {root vegetables,whipped/sour cream,flour} => {whole milk} 0.0017 1 3.9 5 {butter,soft cheese,domestic eggs} => {whole milk} 0.0010 1 3.9 123456

       第4条规则有些长。你可以设置更明确的规则。只要在apriori的函数中添加“maxlen”参数即可:

rules <- apriori(Groceries, parameter = list(supp = 0.001, conf = 0.8,maxlen=3)) 1

冗余规则处理

       有时候,规则会重复生成。冗余规则指的是一条规则被重复给出。作为一个分析师,你应该删除生成的冗余规则。

       用下面的代码可以删除重复生成的规则:

subset.matrix <- is.subset(rules, rules) subset.matrix[lower.tri(subset.matrix, diag=T)] <- NA redundant <- colSums(subset.matrix, na.rm=T) >= 1 rules.pruned <- rules[!redundant] rules<-rules.pruned 12345

目标项集

       我们知道了如何生成项集、限制输出,现在我们生成关于指定的目标项集的规则。我们可能感兴趣的目标有两种,以“whole milk”来说明:

客户在购买whole milk前会购买什么?客户购买了whole milk后还会购买什么?

       这基本上意味着我们要设置关联规则的左边或者右边。这对R语言并不难。

       针对第一个问题,我们将apriori函数做以下调整:

rules<-apriori(data=Groceries, parameter=list(supp=0.001,conf = 0.08), appearance = list(default="lhs",rhs="whole milk"), control = list(verbose=F)) rules<-sort(rules, decreasing=TRUE,by="confidence") inspect(rules[1:5]) 12345

结果如下:

lhs rhs supp. conf. lift 1 {rice,sugar} => {whole milk} 0.0012 1 3.9 2 {canned fish,hygiene articles} => {whole milk} 0.0011 1 3.9 3 {root vegetables,butter,rice} => {whole milk} 0.0010 1 3.9 4 {root vegetables,whipped/sour cream,flour} => {whole milk} 0.0017 1 3.9 5 {butter,soft cheese, domestic eggs} => {whole milk} 0.0010 1 3.9 123456

       同样的,我们设置关联规则的左边为“whole milk”。需要注意的是:

由于置信度设为0.8时没有规则产生,因此设为0.15项集长度设置为2,以避免规则左边的项集为空

rules<-apriori(data=Groceries, parameter=list(supp=0.001,conf = 0.15,minlen=2), appearance = list(default="rhs",lhs="whole milk"), control = list(verbose=F)) rules<-sort(rules, decreasing=TRUE,by="confidence") inspect(rules[1:5]) 12345

结果如下:

lhs rhs support confidence lift 1 {whole milk} => {other vegetables} 0.075 0.29 1.5 2 {whole milk} => {rolls/buns} 0.057 0.22 1.2 3 {whole milk} => {yogurt} 0.056 0.22 1.6 4 {whole milk} => {root vegetables} 0.049 0.19 1.8 5 {whole milk} => {tropical fruit} 0.042 0.17 1.6 6 {whole milk} => {soda} 0.040 0.16 0.9 1234567

可视化:
       最后一步是可视化。我们可以通过arulesViz包来画出规则的图。

library(arulesViz) plot(rules,method="graph",interactive=TRUE,shading=NA) 12

       你会得到一幅可移动的图,像这样:
在这里插入图片描述

网址:关联规则挖掘实践 https://www.yuejiaxmz.com/news/view/693310

相关内容

数据挖掘应用实例
实时决策支持系统:数据挖掘中的实时光速分析
AI在出行场景的应用实践:路线规划、ETA、动态事件挖掘…
成本管控实战:挖掘项目节约潜力的关键策略
卡特彼勒302.7挖掘机和洋马55挖掘机哪个好
原装日立260挖掘机和洋马55挖掘机哪个好
智能家居知识图谱的数据挖掘技术
天津环保二手挖机交易市场,小型挖掘机
医学大数据挖掘与临床决策支持系统的设计与实现研究.pptx
三一重工+恒立液压=挖掘机,揭秘:挖掘机高光背后的秘密

随便看看