关联规则

来源:互联网 发布:数控车床有编程软件吗 编辑:程序博客网 时间:2024/06/10 14:46

什么是关联分析

关联分析是数据挖掘领域常用的一类算法,主要用于发现隐藏在大型数据集中有意义的联系。

举一个大家最耳熟能详的例子,就是尿布和啤酒,表示成关联规则的形式就是{尿壶} —>{啤酒}。这就是使用关联分析方法所得到的结果,而关联分析所得到的结果,我们可以用关联规则或者频繁项集的形式表示。在进行关联分析时,我们常常会遇到这样两个问题:

A. 从大型数据集中发现模式一般来说需要在计算上付出巨大的代价,甚至往往是impossible的,我们往往采用置信度和支持度的剪枝来解决这个问题。

B. 所发现的某些模式可能是虚假的,这个我们需要采用一些关联规则的评估来解决这个问题。

概念

独立事件:P(AB) =P(A) P(B),称A,B 相互独立。概念上就是AB同时发生的概率等于事件A发生的概率乘以事件B发生的概率。

A. 项集:在关联分析中,包含0个或者多个的项的集合称为项集。如果一个项集包含k个项,那么就称为k-项集。比如{牛奶,咖啡}则称为2项集。

B. 支持度: 支持度用来确定给定数据集的频繁程度,即给定数据集在所有的数据集中出现的频率,例如Support(X,Y) = P(X,Y)/N

C. 置信度: 置信度则是用来确定Y在包含X的事务中出现的频繁程度,即Confidence(X==>Y) = P(X,Y)/P(X)

支持度和置信度的意义在于,支持度是一个重要的度量,如果支持度很低,代表这个规则其实只是偶然出现,基本没有意义。因此,支持度通常用来删除那些无意义的规则。而置信度则是通过规则进行推理具有可靠性。用c(X->Y)来说,只有置信度越高,Y出现在包含X的事务中的概率才越大,否则这个规则也没有意义。通常我们在做关联规则发现的时候都会设定支持度和置信度阈值 minsup 和minconf , 而关联规则发现则是发现那些支持度大于等于minsup 并且置信度大于 minconf的所有规则。所以,提高关联分析算法效率最简单的办法则是提高支持度和置信度的阈值。

支持度、置信度的局限

我们来考虑一下支持度-置信度框架的局限性。

首先是支持度,举例来说,在图书市场中,文学类书籍的数量远大于物理类书籍,那么物理类书籍的规则支持度就会很低,这样就导致很多物理类书籍的关联规则都被过滤掉了。

接下来是置信度,举例来说,我们对1000个交易记录分析,假设这1000条记录只有四种行为:购买商品A,不购买商品A,购买商品B,不购买商品B。发现有500条购买记录包含商品A,包含商品A的500条记录又有300条记录包含商品B,那么我们通过置信度计算发现Confidence (商品A==商品B)=0.6这个的置信度非常高,我们于是可以推算出买商品A的人都喜欢买商品B。但是其实我们看接下来的调查,另外没有购买商品A500条记录中,有400条购买了商品B综上所述,我们可以发现,其实购买商品A和购买商品B是两个独立事件。所以我们可以概括一下,置信度的缺点,就是忽略了不在规则事件中的项集的支持度。

提升度,Lift

还是以上面的1000个交易记录为例子,500个交易包含购买商品A,700个交易包含购买商品B,300个交易同时包含购买A、B商品。Support(AB)=0.3,且Confidence(A==>B)= 0.6。不管支持度和置信度看上去都很高。但是这样的关联规则是有问题的。

Confidence(A==>B)= 0.6表示用户在购买了商品A后有0.6的概率的去购买商品B,而在没有任何前提条件时,用户反而有(700/1000=0.7)的概率去购买商品B,也就是说在购买了商品A的条件反而会降低用户去购买商品B的概率。这样看来使用(A==>B)这条规则来进行推荐,还不如不推荐,随机对顾客推荐好了。为此,引入另外一个量,即提升度(Lift),以度量此规则是否可用。

Lift的物理含义,直接参考:http://www.cnblogs.com/zgw21cn/archive/2009/05/31/1492809.html。我这里直接截图了:


也就是说这lift指标表示了一条关联规则是否有效,这里表示度量(A==>B)这条规则有效程度的值为1.32满足最小支持度和最小置信度的规则,叫做“强关联规则”。然而,强关联规则里,也分有效的强关联规则和无效的强关联规则。

如果Lift(X→Y)>1,则规则“X→Y”是有效的强关联规则。

如果Lift(X→Y) <=1,则规则“X→Y”是无效的强关联规则。

特别地,如果Lift(X→Y) =1,则表示X与Y相互独立。

这里再推荐一篇博客(http://blog.csdn.net/rav009/article/details/8985322)的结论:


参考

理论方面:

http://book.douban.com/annotation/16911003/

http://www.cnblogs.com/zgw21cn/archive/2009/05/31/1492809.html

http://blog.csdn.net/rav009/article/details/8985322

代码实现:

mahout版本:http://www.cnblogs.com/ValiancyHe/archive/2013/07/06/3174944.html

java版本:http://www.cnblogs.com/zhangchaoyang/articles/2198946.html

python版本:http://lxneng.iteye.com/blog/471067

spark版本:https://spark.apache.org/docs/latest/mllib-frequent-pattern-mining.html#fp-growth

 

0 0
原创粉丝点击