Apriori算法的原理和流程

Apriori算法——关联规则挖掘

前言:

首先,关联规则挖掘的目的是找出事物之间存在的隐藏的关系,比如经典的案例啤酒和尿布的的故事,用我们人的思维来思考的话,男性在买尿布的时候会买几瓶啤酒,这二者并没有什么因果关系。然而通过对海量数据进行关联分析,却能够发现这个有趣的知识,在超市调整货架后,明显的提升了超市啤酒尿布的销量。

基本概念:

1.关联规则的表示:   泡面 => 火腿 [support=2%;confidence=70%] 。这个就是关联规则的表示方法,其中支持度(support)和 (置信度)confidence是两个衡量这个规则是否有趣的度量标准。

2.支持度:按照上面的例子来讲,已知了支持度是2%,意味着所有事务的2%显示同时买了泡面和火腿。如果这个有疑惑大可不必着急,这个在还会在后续的例子里面具体阐述。

3.置信度:例如上述的置信度为70%,意味着所有买泡面的顾客,70%的顾客都买了火腿。

4.项集:项集就是项的集合,例如:{矿泉水,泡面,火腿}  这是一个3项集,项集的出现频度是包含项集的事务数,把它记作支持度计数,通俗的来说,假设有三个顾客分别买了{矿泉水,泡面,火腿}、{矿泉水,泡面,火腿、牛栏山}、{矿泉水,火腿}。那么这个3项集的支持度计数就是2。

5.频繁项集:如果我们预定义的支持度计数是2,也就是此时的支持度计数阈值为2,而上述的3项集的支持度计数是2,所以该3项集是频繁项集。

6.置信度计算公式:confidence( 泡面 => 火腿 ) = P(火腿  |  泡面) = {\color{Green} }\frac{support(noodles \bigcup ham)}{support(noodles)}   

                                                                                                                 =   \frac{supportcount(noodles \cup ham)}{supportcount(noodles)}

所以想求置信度,核心是求频繁项集。关联规则挖掘的步骤分两步:1.找所有的频繁项集。2.根据频繁项集生产强关联规则

Apriori算法举例:

接下来用一个例子用apriori算法来走一遍关联规则的流程(本例子预定义的支持度为2),下图是事物数据,9个顾客分别买了不同的商品列表(我们假定I1表示泡面,I2表示矿泉水,I3表示牛栏山,I4表示雪碧,I5表示火腿)。

首先我们要做的是第一次迭代,扫描所有的事物,对每个项进行计数得到候选项集,得到如下图所示的结果,记为C1

此时,我们要对支持度计数和支持度的阈值进行比较,剔除小于支持度阈值的项集,显而易见,在本例中C1的项集都达到了阈值。我们便可以得出频繁1项集记作L1

接下来我们要进行第二次迭代,目的是得出频繁2项集,所以要使用连接来产生候选项集2项集。L1 \bowtie L1 得出

连接这一步,我们把它叫做连接步,连接得到C2后,接下来做的是剪枝步,就是剪掉项集中包含不频繁项的项集,在本例中1项集全部都是频繁项集,例如{I1,I2}中没有不频繁项集,此项集不剪,{I1,I3}中没有不频繁项集,同理不剪,以此类推。所以C2中所有的项集都不需要剪掉。到此连接步、剪枝步全部完成。(这里值得注意的是剪枝是必须的一步,不能省略)最后再计一下数得出最终的C2。如下图所示。

将支持度计数小于阈值2的全部剔除,得出频繁2项集L2,如下图所示。


现在开始进行第三次迭代,L2 \bowtie L2 得出候选项集C3,如下图所示。

在这一步同样是经过了连接步剪枝步。L2自连接得到

然而除了之外。中都含有不频繁项集,第一个{I3,I5}不是L2的元素所以要剪枝,后面以此类推,最终得到上图的C3。(再重视一下,这个剪枝不能省略)。最后记一下数,得出最终的候选项集C3

得到候选项集C3后与支持度阈值比较,得出频繁3项集L3。

现在继续第四次迭代L3 自连接得到  {I1,I2,I3,I5} ,接下来剪枝,因为这个项集中{I2,I3,I5}不属于L3,所以剪掉,C4为空了,所以算法到此结束,现在得出了所有的频繁项集

到此为止,我们做完了第一步:找出所有的频繁项集。接下来要做的便是输出强关联规则

现在我们拿X = {I1,I2,I5}为例,输出关联规则。X的非空子集为{I1,I2}、{I1,I5}、{I2,I5}、{I1}、{I2}、{I5}。所以组合一下关联规则如下:

置信度我们根据上文提到的公式来算,拿第一个{I1,I2} => I5为例。confidence = P(I5  |   {I1,I2})

                                                                                                         =  support_count({I2 , I1, I5}) /   support_count({I1,I2})

通过查找L3,{I1,I2,I5}的支持度计数为2,通过查L2,{I1,I2}的支持度计数为4。即最终可以计算出confidence = \frac{2}{4} =  50%。剩下的以此类推,假定我们预定义70%的置信度。在这些规则中,我们可以输出强关联规则的只有三个。即三个100%置信度的规则。那么我们可以得到买泡面和火腿的一定会买矿泉水,买矿泉水和火腿的一定会买泡面,买火腿的一定会买泡面和矿泉水这三个关联规则。

算法评价:

到此为止,用apriori算法实现关联规则挖掘的流程全部结束,可以看出的是,apriori算法要生成大量的候选项集,每生成频繁项集都要生成候选项集。其次要一直迭代重复的扫描事物数据来计算支持度。所以带来的问题很明显,这会导致效率会比较低下。所以apriori算法也有其他的变形优化,这个我们之后再谈。

参考:

本篇文章的例子出自韩家炜教授主编的《数据挖掘概念与技术》(第三版)的第六章。

  • 44
    点赞
  • 178
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值