R语言数据挖掘(3)——关联分析

来源:互联网 发布:淘宝禁售商品管理规范 编辑:程序博客网 时间:2024/05/06 18:10

一、基本概念

1.支持度(support)

支持度是指在所有项集中{X,Y}出现的可能性,即项集中同时含有X和Y的概率

support(X→Y)=P(X,Y)

通过最小阈值的设定,剔除频率较低的无意义规则。满足

support(Z)>=minsup

的项集Z,称为频繁项集


2.置信度(confidence)

置信度表示在关联规则的先决条件X发生的条件下,关联结果Y发生的概率,即在含有X的情况下含有Y的条件概率

confidence(X-Y)=P(Y|X)

置信度衡量了关联规则在“质量”上的可靠性。同样采用最小阈值选出满足confidence(Z)>=mincon的强关联规则


3.提升度(lift)

提升度为Y自身出现的概率P(Y)与含有X的情况下含有Y的条件概率P(Y|X)之比。其值越大(>1),表面X对Y的提升成都


二、R中的实现

1.Packages

arules:用于关联规则的数字化生成,提供Apropri和Eclat两种快速挖掘频繁项集和关联规则的实现函数

2.apriori函数

Apriori算法

Apriori原理是说如果某个项集是频繁的,那么它的所有子集势必也是频繁的。这个原理从表面上看没什么大用,但是反过来,如果一个项集是非频繁项集,那么它所对应的超集就全都是非频繁项集。

Apriori算法的两个输入参数分别是最小支持度和数据集。该算法首先生成所有单个物品的项集列表,遍历之后去掉不满足最小支持度要求的项集;接下来对剩下的集合进行组合生成包含两个元素的项集,去掉不满足最小支持度的项集;重复该过程直到去掉所有不满足最小支持度的项集。

对应的,采用可信度来量化关联规则。如果某条规则不满足最小可信度要求,那么该规则的所有子集也就不满足最小可信度要求,据此我们可以减少需要测试的规则数目,简化问题。

寻找关联规则的思想是:从一个频繁项集开始,创建一个规则列表,首先将规则的右边限定为一个元素,对这些规则进行测试,接下来合并剩下的规则来创建一个新的规则列表,规则的右边限定为两个元素,就这样一步一步实现。

apriori(data,parameter=NULL,appearance=NULL,control=NULL)

parameter:设置支持度,置信度,每个项集所含项数的最大值和最小值,输出结果

默认support=0.1,confidence=0.8,maxlen=10,minlen=1,target=“rules”/"frequent itemsets"


3.Elact函数

Eclat算法见笔记。

eclat(data,parameter=NULL,cotrol=NULL)

parameter中target不能设置为rules,即eclat不能生成关联规则,同时maxlen默认为5.


三、案例应用

1.初探

rules0 = apriori(Groceries,parameter = list(support=0.001,confidence = 0.5))

> rules0set of 5668 rules 

>  inspect(rules0[1:10])     lhs                    rhs                support     confidence lift     count[1]  {honey}             => {whole milk}       0.001118454 0.7333333  2.870009 11   [2]  {tidbits}           => {rolls/buns}       0.001220132 0.5217391  2.836542 12   [3]  {cocoa drinks}      => {whole milk}       0.001321810 0.5909091  2.312611 13   [4]  {pudding powder}    => {whole milk}       0.001321810 0.5652174  2.212062 13   [5]  {cooking chocolate} => {whole milk}       0.001321810 0.5200000  2.035097 13   [6]  {cereals}           => {whole milk}       0.003660397 0.6428571  2.515917 36   [7]  {jam}               => {whole milk}       0.002948653 0.5471698  2.141431 29   [8]  {specialty cheese}  => {other vegetables} 0.004270463 0.5000000  2.584078 42   [9]  {rice}              => {other vegetables} 0.003965430 0.5200000  2.687441 39   [10] {rice}              => {whole milk}       0.004677173 0.6133333  2.400371 46   

(lhs:先决条件X;rhs:关联结果Y)

首先,apriori()的结果是rule型数据。通过inspect()函数可以看到support,confidence,lift,count四个指标。而结果的排序和这几个数值大小没有明显关系。

接下来对生成的规则进行强度控制。常用方法是通过提高支持度和/或置信度来实现。通过apriori()函数重新计算更高支持度和置信度下的规则。

2.若通过单一的支持度或者置信度或者提升度控制,可以使用

rules.sorted_sup = sort(rules0, by = "support")  即通过排序进行控制。

通过提升度筛选一般是最可靠的方法。


五、关联关系可视化

关联关系可视化通过arulesViz包进行

plot(rules0,measure = c("support","confidence"),shading="lift")

plot(rules,interactive = T)

plot(rules0,measure = c("support","confidence"),shading="order")  Two - key 图制作。颜色深浅表示商品数量

plot(rules0,method="grouped")

plot(rules0,method = "paracord")

plot(rules0,method = "graph")

规则与规则往往容易变得混乱,因此是比较可行的是使用非常小的规则集。