机器学习算法——关联规则


一、概述

   关联规则是发现事物之间的关系的分析过程,关联规则最初提出的动机是针对购物篮分析(Market Basket Analysis)问题提出的。假设分店经理想更多的了解顾客的购物习惯。特别是,想知道哪些商品顾客可能会在一次购物时同时购买?为回答该问题,可以对商店的顾客事物零售数量进行购物篮分析。该过程通过发现顾客放入“购物篮”中的不同商品之间的关联,分析顾客的购物习惯。这种关联的发现可以帮助零售商了解哪些商品频繁的被顾客同时购买,从而帮助他们开发更好的营销策略。

二、参数

   关联规则算法主要有频繁项集、支持度、置信度、提升度等指标,各个指标定义如下:

  (1) 频繁项集

    对于一个数据表而言,每个字段的不同取值我们称之为“项”,而该数据表内各项的任意组合称之为项集,支持度大于最小支持度的项集称为频繁项集。

  (2) 支持度

    支持度的公式为:Support(A->B)=P(A U B)。从数学概念上理解即A与B同时出现的概率。如果A与B同时出现的概率小,说明A与B的关系不大;如果A与B同时出现的非常频繁,则说明A与B总是相关的。

  (3) 置信度

    置信度的公式为:Confidence(A->B)=P(B | A)。数学形式为条件概率,A发生的条件下,B发生的概率,置信度揭示了A出现时,B是否也会出现或有多大概率出现。如果置信度度为100%,则说明A和B必然存在联系。如果置信度太低,则说明A的出现与B是否出现关系不大。

  (4) 提升度

    提升度的公式为:Lift(A→B)=Confidence(A→B)/Support(B),度量规则是否可用的指标,描述的是相对于不用规则,使用规则可以提高多少,有用的规则的提升度大于1,在实际应用中,一般设置提升度大于1,以便滤除无意义的规则。

三、举例

  为了更好的理解关联规则,特此举一个简单的小例子来说明,假设一个数据表为:

苹果 香蕉 鸭梨    
橘子 葡萄 苹果 哈密瓜 火龙果
香蕉 哈密瓜 火龙果 葡萄  
橘子 香蕉      
哈密瓜 鸭梨 葡萄    

  让我们首先来计算“苹果”的支持度,我们可以看到包含苹果的项集共两项,总项集的个数为五项,那么Support(苹果)= 2/5 = 40%,香蕉苹果同时出现的项集只有一个,那么Support(香蕉->苹果)= 1/5 = 20% ,由此可以得到置信度Confidence(香蕉->苹果)= 20% / 40% = 50%;此外,包含香蕉的项集共三项,即Support(香蕉)= 3/5 = 60%,那么我们可以得出香蕉对苹果的提升度,Lift (香蕉->苹果) = Confidence(香蕉->苹果)/Support(香蕉) = 83.33%,lift<1,说明规则{香蕉,苹果}无应用意义。同理我们可以算出 Lift (哈密瓜->葡萄) =  167%,大于1,说明哈密瓜与葡萄存在关联。

四、算法

1.Apriori算法

  Apriori算法:使用候选项集找频繁项集

  Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集。

该算法的基本思想是:首先找出所有的频集,这些项集出现的频繁性至少和预定义的最小支持度一样。然后由频集产生强关联规则,这些规则必须满足最小支持度和最小可信度。然后使用第1步找到的频集产生期望的规则,产生只包含集合的项的所有规则,其中每一条规则的右部只有一项,这里采用的是中规则的定义。一旦这些规则被生成,那么只有那些大于用户给定的最小可信度的规则才被留下来。为了生成所有频集,使用了递推的方法。

Apriori算法采用了逐层搜索的迭代的方法,算法简单明了,没有复杂的理论推导,也易于实现。但其有一些难以克服的缺点:

  (1)对数据库的扫描次数过多。

  (2)Apriori算法会产生大量的中间项集。

  (3)采用唯一支持度。

  (4)算法的适应面窄。

2.基于划分的算法

  基于划分的算法

  Savasere等设计了一个基于划分的算法。这个算法先把数据库从逻辑上分成几个互不相交的块,每次单独考虑一个分块并对它生成所有的频集,然后把产生的频集合并,用来生成所有可能的频集,最后计算这些项集的支持度。这里分块的大小选择要使得每个分块可以被放入主存,每个阶段只需被扫描一次。而算法的正确性是由每一个可能的频集至少在某一个分块中是频集保证的。该算法是可以高度并行的,可以把每一分块分别分配给某一个处理器生成频集。产生频集的每一个循环结束后,处理器之间进行通信来产生全局的候选k-项集。通常这里的通信过程是算法执行时间的主要瓶颈;而另一方面,每个独立的处理器生成频集的时间也是一个瓶颈。

3.FP-树频集算法

  FP-树频集算法

  针对Apriori算法的固有缺陷,J. Han等提出了不产生候选挖掘频繁项集的方法:FP-树频集算法。采用分而治之的策略,在经过第一遍扫描之后,把数据库中的频集压缩进一棵频繁模式树(FP-tree),同时依然保留其中的关联信息,随后再将FP-tree分化成一些条件库,每个库和一个长度为1的频集相关,然后再对这些条件库分别进行挖掘。当原始数据量很大的时候,也可以结合划分的方法,使得一个FP-tree可以放入主存中。实验表明,FP-growth对不同长度的规则都有很好的适应性,同时在效率上较之Apriori算法有巨大的提高。

五、小结

  关联规则是机器学习中较为简单的算法,后续将介绍关联规则中的Apriori算法和FP-Growth算法的python实现。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM