R中基于包arules的关联规则分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关联规则实验
一函数解析
关联规则分析试图在很大的数据集中找出关联或相关的关系。
关联规则显示出在一个给定的数据集中频繁地一同出现的变量。
关联规则的原理很简单,就是看一些事情同时出现的频率。
需要注意,关联规则处理的都是二分变量,如果是连续变量则应该换成离散型,如果不是二分变量,软件会把它们变成二分变量。
本文不在讲解关联分析的原理,而在于讲解用R中的arules包来实现关联规则挖掘。
参考《复杂统计统计方法与R》P152
所用到的arules包中的函数如下
itemFrequencyPlot(X,support=0.05,s=0.8)
该函数用来画出数据(X)中每一个项目的频率直方图。
参数解释:X是由as所得到的对象。
关于as下面例子里有
support是表示画出频率大于多少的项目。
(上面即画出频率大于0.05的项或项集)
s是用来调字号大小的,不必深究
其他参数自己看帮助文档。
eclat(X,parameter=list(support=0.05,maxlen=10))
该函数用来求频繁项集
参数解释:X仍然是具有关联规则的特殊数据结构的数据(由as得到)parameter是设置频繁项集的标准。
suppor表示频率大于
0.05的项集才能叫频繁项集。
该函数则求出频率大于0.05的所有项集。
至于maxlen是什么作用,没搞明白。
inspect(X)
该函数用于显示规则和项集。
X可以是eclat得到的对象,也可以是apriori得到的对象
apriori(X,parameter=list(support=0.01,confidence=0.01))
该函数是关联规则分析的核心函数。
就是用它来计算出所有的规则。
参数解释:X是具有关联规则要求的结构类型的数据,即由as得到的对象。
parameter是用来设定计算多大频率(支持度)和多大置信度的关联规则。
上面即是求出所有支持度大于0.01和置信度大于0.01的关联规则。
subset(X,subset=)
该函数用来提取X的子集,其中subset参数是用来说明提取什么样的子集。
二、具体例子
下面以一个具体的例子来说明实现关联分析的过程。
用的数据是arules包中自带的数据IncomeESL.需要说明的是该数据的每一列都是因子类型的,都有各自的水平。
每一个样本代表一个家庭。
代码如下> library(arules)
> data(IncomeESL)
#下面是处理数据,将每一个变量按照某种标准变成二分变量(即只有两个水平的因子变量)
> IncomeESL<-IncomeESL[complete.cases(IncomeESL),]
>IncomeESL[['income']]<-factor((as.numeric(IncomeESL[['income']])>6)+ 1,levels=1:2,labels=c('$0-$40000','$40000+'))
> IncomeESL[['age']]<-factor((as.numeric(IncomeESL[['age']])>3)+1,
+ levels=1:2,labels=c('14-34','35+'))
>IncomeESL[['education']]<-factor((as.numeric(IncomeESL[['education']]) >4)+1,levels=1:2,labels=c('no college graduate','college graduate'))
> IncomeESL[['years in bay area']]<-factor((as.numeric(IncomeESL
+ [['years in bay area']])>4)+1,levels=1:2,labels=c('1-9','10+'))
> IncomeESL[['numeric in household']]<-factor((
+ as.numeric(IncomeESL[['number in household']])>3)+1,
+ levels=1:2,labels=c('1','2+'))
> IncomeESL[['number of children']]<-factor((
+ as.numeric(IncomeESL[['number of children']])>1)+0,
+ levels=1:2,labels=c('0','1+'))
#下面是将处理好的数据转化为关联分析特别要求的数据形式‘transactions’
> Income<-as(IncomeESL,'transactions') #用的就是as这个函数,要记住> summary(Income) #可以看一看它的数据结构是什么样的
> itemFrequencyPlot(Income,support=0.05,s=0.8)#我们不妨看一看频率在0.05以上的项集都有什么。
这是通过图像来看的。
> fsets<-eclat(Income,parameter=list(support=0.05,maxlen=10))#我们也可以看一看频率大于0.05的项集都有哪些。
首先通过这条语句来计算。
> inspect(sort(fsets,by='support')[1:10])#用该函数打印出前10条结果来观察。
用sort来控制按从大到小的顺序打印,by是控制要按照支持度的大小顺序来打印。
结果如下
比方说第一个项集就表示说英语的家庭占总调查家庭的0.9128854.
#通过以上我们对我们的数据的构成以及其他信息大致有一个了解。
下面我们来挖掘出我们想寻找的关联规则。
(比如说我们想找出支持度,即项目一起出现的频率大于0.01,且置信度大于0.01的那些项集有哪些)
> rules<-apriori(Income,parameter=list(support=0.01,confidence=0.01)) #该函数求出满足我们的关联规则
#rules中的数据量比较大。
我们从中提取出一个子集出来观察。
从在rhs(即右项或者后项)中的收入大于40000的集中提取出提升度大于1.2的那部分。
语句如下
> x<-subset(rules,subset=rhs%in%'income=$40000+'&lift>1.2)
#下面我们取出x的前5个关联规则,按照支持度降幂的顺序来观察> inspect(sort(x,by='support')[1:5]) #结果如下
我们对结果解释如下:
这说明大多数收入超过4万美元的家庭都自己有房子,说英文等等。
其中lhs表示前项(左项),rhs表示后项(右项)。
第一条规则说明:住在独栋房屋而收入在4万美元以上的人占总家庭数的27.7%(即支持度),而在住在独栋房屋的人中,收入超过4万美元的占46.5%(即置信度),且这个比例值(即置信度)为整个总体相应比例值的1.23倍。
#下面我们再按照lift的降幂顺序来看看x中关联规则的前3条
> inspect(sort(x,by='lift')[1:3]) #下面是打印的结果
从第一个规则可以看出:如果同时满足下列条件前项:大学毕业、在旧金山湾注满1年,有双份收入,没有孩子,拥有自己房子且说英语,而且后项:收入在4万美元以上,则占总家庭的1.3%,而收入在4万美元以上在上述人中的百分比则高达97.8%,这个比例为整个总体中相应比例值的2.59倍。