机器学习(十八)——关联规则挖掘
Posted antkillerfarm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习(十八)——关联规则挖掘相关的知识,希望对你有一定的参考价值。
关联规则挖掘
基本概念(续)
定义一:设 I=i1,i2,…,im ,是m个不同的项目的集合,每个 ik 称为一个项目。项目的集合I称为项集。其元素的个数称为项集的长度,长度为k的项集称为k-项集。引例中每个商品就是一个项目,项集为 I=bread,beer,cake,cream,milk,tea ,I的长度为6。
定义二:每笔交易T是项集I的一个子集。对应每一个交易有一个唯一标识交易号,记作TID。交易全体构成了交易数据库D, |D| 等于D中交易的个数。引例中包含10笔交易,因此 |D|=10 。
定义三:对于项集X,设定 count(X⊆T) 为交易集D中包含X的交易的数量,则项集X的支持度为:
support(X)=count(X⊆T)|D|
引例中 X=bread,milk 出现在T1,T2,T5,T9和T10中,所以支持度为0.5。
定义四:最小支持度是项集的最小支持阀值,记为 SUPmin ,代表了用户关心的关联规则的最低重要性。支持度不小于 SUPmin 的项集称为频繁集,长度为k的频繁集称为k-频繁集。如果设定 SUPmin 为0.3,引例中 bread,milk 的支持度是0.5,所以是2-频繁集。
定义五:关联规则是一个蕴含式:
R:X⇒Y
其中 X⊂I , Y⊂I ,并且 X∩Y=∅ 。表示项集X在某一交易中出现,则导致Y以某一概率也会出现。用户关心的关联规则,可以用两个标准来衡量:支持度和可信度。
定义六:关联规则R的支持度是交易集同时包含X和Y的交易数与 |D| 之比。即:
support(X⇒Y)=count(X∩Y)|D|
支持度反映了X、Y同时出现的概率。关联规则的支持度等于频繁集的支持度。
定义七:对于关联规则R,可信度是指包含X和Y的交易数与包含X的交易数之比。即:
confidence(X⇒Y)=support(X⇒Y)support(X)
可信度反映了如果交易中包含X,则交易包含Y的概率。一般来说,只有支持度和可信度较高的关联规则才是用户感兴趣的。
定义八:设定关联规则的最小支持度和最小可信度为 SUPmin 和 CONFmin 。规则R的支持度和可信度均不小于 SUPmin 和 CONFmin ,则称为强关联规则。关联规则挖掘的目的就是找出强关联规则,从而指导商家的决策。
这八个定义包含了关联规则相关的几个重要基本概念,关联规则挖掘主要有两个问题:
1.找出交易数据库中所有大于或等于用户指定的最小支持度的频繁项集。
2.利用频繁项集生成所需要的关联规则,根据用户设定的最小可信度筛选出强关联规则。
其中,步骤1是关联规则挖掘算法的难点,下文介绍的Apriori算法和FP-growth算法,都是解决步骤1问题的算法。
参考:
http://blog.csdn.net/OpenNaive/article/details/7047823
Apriori算法
Apriori算法的思路如下:
1.第一次扫描交易数据库D时,产生1-频繁集。在此基础上经过连接、修剪产生2-频繁集。以此类推,直到无法产生更高阶的频繁集为止。
2.在第k次循环中,也就是产生k-频繁集的时候,首先产生k-候选集,k-候选集中每一个项集都是对两个只有一个项不同的属于k-1频繁集的项集连接产生的。
3.k-候选集经过筛选后产生k-频繁集。
从频繁集的定义,我们可以很容易的推导出如下结论:
如果项目集X是频繁集,那么它的非空子集都是频繁集。
如果k-候选集中的项集Y,包含有某个k-1阶子集不属于k-1频繁集,那么Y就不可能是频繁集,应该从候选集中裁剪掉。Apriori算法就是利用了频繁集的这个性质。
参考:
http://zhan.renren.com/dmeryuyang?gid=3602888498023976650&checked=true
http://blog.csdn.net/lizhengnanhua/article/details/9061755
FP-growth算法
Aprori算法利用频繁集的两个特性,过滤了很多无关的集合,效率提高不少,但是我们发现Apriori算法是一个候选消除算法,每一次消除都需要扫描一次所有数据记录,造成整个算法在面临大数据集时显得无能为力。
FP-Growth算法是韩家炜等人在2000年提出的关联分析算法。它通过构造一个树结构来压缩数据记录,使得挖掘频繁项集只需要扫描两次数据记录,而且该算法不需要生成候选集合,所以效率会比较高。
注:韩家炜,中国科学技术大学本科(1979)+中科院硕士+威斯康辛大学博士(1985)。美国伊利诺伊大学香槟分校计算机系教授,IEEE和ACM院士。
FpGrowth算法的平均效率远高于Apriori算法,但是它并不能保证高效率,它的效率依赖于数据集,当数据集中的频繁项集的没有公共项时,所有的项集都挂在根结点上,不能实现压缩存储,而且Fptree还需要其他的开销,需要存储空间更大,使用FpGrowth算法前,对数据分析一下,看是否适合用FpGrowth算法。
参考:
http://www.cnblogs.com/fengfenggirl/p/associate_fpgowth.html
幸存者偏差
二战期间,盟军需要对战斗机进行装甲加厚,以提高生还率,但由于军费有限,只能进行局部升级。那么问题来了,究竟哪个部位最关键,最值得把装甲加厚来抵御敌方炮火呢?人们众口不一,最后一致决定采用统计调查的方式来解决,即:仔细检查每一驾战斗机返回时受到的损伤程度,计算出飞机整体的受弹状况,然后根据大数据分析决定。
不久,统计数据很快出炉:盟军飞机普遍受弹最严重的地方是机翼,有的几乎被打成了筛子;相反,受弹最轻的地方是驾驶舱及尾部发动机,许多飞机的驾驶舱甚至连擦伤都没有。
正当所有人拿着这份确凿无疑的报告准备给机翼加厚装甲时,统计学家Abraham Wald阻拦了他们,同时提出了一个完全相反的方案:加厚驾驶舱与尾部。理由非常简单:这两个位置中弹的飞机,都没有回来。换言之,它们是一份沉默的数据——“死人不会说话”。
最后,盟军高层纷纷听
以上是关于机器学习(十八)——关联规则挖掘的主要内容,如果未能解决你的问题,请参考以下文章
R语言apriori算法进行关联规则挖掘(限制规则的左侧或者右侧的内容进行具体规则挖掘)查看限制了规则的右侧之后挖掘到的规则(置信度排序,只查看左侧即可)
R语言使用apriori算法进行关联规则挖掘实战:关联规则概念频繁项集支持度(support)置信度(confidence)提升度(lift)apriori算法
R语言Apriori算法关联规则挖掘:使用interestMeasure函数评估挖掘到的规则(包括覆盖率(coverage)和FishersExactTest)置信度最高的五条规则(top five