R语言使用Apriori规则完成关联挖掘

来源:互联网 发布:安卓与php服务器端 编辑:程序博客网 时间:2024/06/06 19:24

说明

关联挖掘常被用于发现隐藏在事务数据集间的一些有意义的关联,算法首先找到所有频繁项集,然后从这些频繁项集中生成强规则。Apriori是最为著名的关联规则挖掘技术。该算法先找到频繁个体项集,然后再通过广度优先搜索策略生成更大的频繁项集,直至算法最后再也找不到新的频繁集而结束。

操作

载入Groceries,在arules包中使用Apriori算法进行关联分析。

data("Groceries")summary("Groceries")   Length     Class      Mode         1 character character 

调用itemFrequencyPlot函数检验项集的相关项集频繁度:

itemFrequencyPlot(Groceries,support = 0.1,cex.names = 0.8,topN = 5)

使用apriori函数找到支持度超过0.01,置信度在0.5以上的关联规

rules = apriori(Groceries,parameter = list(supp = 0.001,conf = 0.5,target = "rules"))summary(rules)set of 5668 rulesrule length distribution (lhs + rhs):sizes   2    3    4    5    6   11 1461 3211  939   46    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    2.00    3.00    4.00    3.92    4.00    6.00 summary of quality measures:    support           confidence          lift        Min.   :0.001017   Min.   :0.5000   Min.   : 1.957   1st Qu.:0.001118   1st Qu.:0.5455   1st Qu.: 2.464   Median :0.001322   Median :0.6000   Median : 2.899   Mean   :0.001668   Mean   :0.6250   Mean   : 3.262   3rd Qu.:0.001729   3rd Qu.:0.6842   3rd Qu.: 3.691   Max.   :0.022267   Max.   :1.0000   Max.   :18.996  mining info:      data ntransactions support confidence Groceries          9835   0.001        0.5

查看前面一部分规则:

inspect(head(rules))    lhs                    rhs          support     confidence lift    [1] {honey}             => {whole milk} 0.001118454 0.7333333  2.870009[2] {tidbits}           => {rolls/buns} 0.001220132 0.5217391  2.836542[3] {cocoa drinks}      => {whole milk} 0.001321810 0.5909091  2.312611[4] {pudding powder}    => {whole milk} 0.001321810 0.5652174  2.212062[5] {cooking chocolate} => {whole milk} 0.001321810 0.5200000  2.035097[6] {cereals}           => {whole milk} 0.003660397 0.6428571  2.515917

根据置信度对规则进行排序并查看前面的部分规则:

rules = sort(rules,by = "confidence",decreasing = TRUE)inspect(head(rules))    lhs                                           rhs                support     confidence lift    [1] {rice,sugar}                               => {whole milk}       0.001220132 1          3.913649[2] {canned fish,hygiene articles}             => {whole milk}       0.001118454 1          3.913649[3] {root vegetables,butter,rice}              => {whole milk}       0.001016777 1          3.913649[4] {root vegetables,whipped/sour cream,flour} => {whole milk}       0.001728521 1          3.913649[5] {butter,soft cheese,domestic eggs}         => {whole milk}       0.001016777 1          3.913649[6] {citrus fruit,root vegetables,soft cheese} => {other vegetables} 0.001016777 1          5.168156

原理

关联规则挖掘的目的是找出事务数据库中项集间的关联。典型的,关联规则挖掘的过程包括找到大于最小支持度的项集,然后基于频繁项集生成置信度大于最小置信度的强规则(例如milk =>bread,顾客购买了牛奶后很可能再同时买面包)。一个关联规则可以形式化定义为 X => Y,其中X ,Y都是无关项集。我们可以通过支持度和置信度这两个值来评估规则的强弱。支持度和置信度这两个值来评估规则的强弱。支持度表示了某个某个规则在数据集中出现的频率,而置信度则代表项集X与Y同时出现在个事务中的概率。
由于支持度与置信度仅对判断规则强弱有效,有时一些高置信度与高支持度的规则可能是冗余的,因此,我们使用第三个指标——提升度,来评估规则的质量(级别)。从定义上看,提升度代表了项集X与项集Y随机共现关系上的规则强度。
Apriori是最广为人知的关联规则挖掘算法,它依靠逐层广度优先策略来生成候选项集,算法首先逐层的找到所有的频繁项集(项集支持度大于给定阈值),例如,先找到1-频繁项集,然后基于1-频繁项集找到2-频繁项集,依次递归,基于k-频繁项集生成新的k+1-频繁项集,直到找不到新的繁荣项集。
最后,通过繁荣项集产生关联规则。
Groceries数据集,包括了9835事务,被分成169个类别。还有例如最频繁项集、项集分布等信息,也可以使用itemFrequencyPlot函数来绘制支持度超过0.1的五个最步频繁项。
我们利用算法找到了支持度大于0.001,置信度大于0.5的规则,并使用summary函数来检查这些规则的详细信息,从输出的结果可知,使用Apriori算法获得了5668个符合条件的规则。我们还进一步获取了有关规则长度的分布情况,质量评估信息,挖掘结果等。
从质量评估结果可以得到三类指标,分别是支持度,置信度,提升度。其中,支持度代表了特定项集在事务数据库中所占的比例,置信度是规则的正确率,而提升度代表了响应目标关联规则与平均响应的比值。
可以使用inspect函数来查看部分规则,5668个规则中的前6个,最后我们可以对些规则进行依据置信度大小排序,并将置信度最高的那些规则列表显示出来。我们发现糖与全脂牛奶的关联度最强,支持度为0.001220132.置信度为1,提升度达到3.913649。