Apriori 算法

apriori关联规则算法的原理设计较为简单,著名的“啤酒和尿布”说的就是Apriori算法,通俗来讲apriori旨在寻找频繁项集,以帮助商家将消费者有可能一起搭配购买的物品放置在同一个地方,提高消费者的购物效率和良好的购物体验感。Apriori还是十大数据挖掘算法之一,可见Apriori关联规则算法的重要性。

(一)算法基本理论

1、算法目的

Apriori是最常用最经典的挖掘频繁项集的算法,其核心思想是通过连接产生候选项及其支持度然后通过剪枝生成频繁项集。在一个数据集中找出项之间的关系,比如购买鞋子用户10%可能也会去购买袜子。该算 法通过计算3个值来寻找强关联规则!

2、基本名词解释

1)事务:每一条交易称为一个事务

2)项:交易的每一个物品称为一个项

3)项集:包含零个或者多个项的集合叫做项集

4)K-项集:包含K个项的项集叫做K-项集,比如{cola,egg}叫做2-项集

5)频繁项集:支持度大于等于某个阈值的项集就叫做频繁项集

3、关键值:支持度、置信度、提升度,计算这个3个值来寻找强关联规则

1)A->B支持度:表示同时购买A、B的订单数占总订单数的比例;




java实现LPA算法_协同过滤算法


2)A->B置信度:表示购买A物品订单同时购买了B物品订单的比例,即等于同时购买A和B订单数占购买A物品订单数比例(条件概率)。置信度表示购买A物品有多少概率去购买B物品。


java实现LPA算法_协同过滤算法_02


3)A->B提升度:表示购买A物品的用户同时购买B物品的用户数占购买B物品的比例,计算公式为=置信度/B物品占总数的比例。如果大于1表示正相关性越高,如果等于1表示没有相关性,互相独立,如果小于1则表示负相关性越高。一般在提升度大于3,则认为提升度是有价值的。


java实现LPA算法_关联规则_03


4、结论

A->B:购买A的用户有【置信度】的概率去购买B,而这种情况发生的概率为【支持度】

1)满足支持度和置信度的规则,称之为【强关联规则】,该又分【无效强关联规则】和【有效强关联规则】

2)无效强关联规则:如果提升度<=1,则表示无效强关联规则

3)有效强关联规则:如果提升度>1,则表示有效强关联规则

(二)算法实现案例演示

求最小支持度计数为2的候选项集及频繁项集。(数据集)


java实现LPA算法_频繁项集_04

样例演示数据集(来源于网络)


首先,找出频繁“1项集”的集合,该集合记作L1。L1用于找频繁“2项集”的集合L2,而L2用于找L3。如此下去,直到不能找到“K项集”。找每个Lk都需要一次数据库扫描。

核心思想是:连接步和剪枝步。连接步是自连接,原则是保证前k-2项相同,并按照字典顺序连接。剪枝步,是使任一频繁项集的所有非空子集也必须是频繁的。反之,如果某个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从CK中删除。

简单的讲,1、发现频繁项集,过程为(1)扫描(2)计数(3)比较(4)产生频繁项集(5)连接、剪枝,产生候选项集 重复步骤(1)~(5)直到不能发现更大的频集

Apriori 性质:任一频繁项集的所有非空子集也必须是频繁的。意思就是说,生成一个k-itemset的候选项时,如果这个候选项有子集不在(k-1)-itemset(已经确定是frequent的)中时,那么这个候选项就不用拿去和支持度判断了,直接删除。

比如:K项集{I1,I3,I5},如果任一个子集({I1},{I3},{I5},{I1,I3},{I1,I5},{I3,I5})不在之前的K-1项集的频繁项集里,那么就把该{I1,I3,I5}候选项集去掉。

开始分析

第一次扫描: (左边为候选项集C1,右边为频繁项集L1)


java实现LPA算法_关联规则_05


第二次扫描:(左边为C2,右边为L2)


java实现LPA算法_频繁项集_06


去掉最小支持度小于2的项。

连接:是指产生候选项,如两项{I1,I2},{I1,I3},三项{I1,I2,I3},{I1,I2,I4}等。

L2自身连接(根据算法性质,注意理解,这样只需要对有可能成为频繁项集的候选项集进行处理,提高效率):(如果看得出下一步结果,这一步以及剪枝可以省略,直接进行第三次扫描)


java实现LPA算法_apriori算法_07


剪枝得到:(剪枝规则是将自身连接得到的C2,将次数小于最小支持度2的剪掉)

第三次扫描:(左边为C3,右边为L3)


java实现LPA算法_apriori算法_08


得到最终结果:


java实现LPA算法_频繁项集_09


如果购买I1,那么可以推荐I2,I3或者I2,I5给用户搭配购买。

(三)算法优缺点

优点:Apriori算法使用Apriori性质来生产候选项集的方法,大大压缩了频繁集的大小, 取得了很好的性能。

缺点:每一次迭代都要遍历整个数据进行计数计算和判断,运行效率低。