机器学习(三):Apriori算法(算法精讲)

机器学习(三):Apriori算法(算法精讲)

在这里插入图片描述
上面图片就是Apriori算法的一部分流程,是不是看不太懂,当初看理解这个算法也花了不少时间,在这里我先介绍一下关联规则挖掘。

Apriori算法——关联规则挖掘

1)关联规则挖掘

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

2)基本概念

  1. 关联规则的表示: 尿布 => 啤酒 [support=2%;confidence=70%] 。这个就是关联规则的表示方法,其中支持度(support)和 (置信度)confidence是两个衡量这个规则是否有趣的度量标准。
  2. 支持度:按照上面的例子来讲,已知了支持度是2%,意味着所有事务的2%显示同时买了泡面和火腿。如果这个有疑惑大可不必着急,这个在还会在后续的例子里面具体阐述。
  3. 置信度:例如上述的置信度为70%,意味着所有买泡面的顾客,70%的顾客都买了火腿。
  4. 项集:项集就是项的集合,例如:{矿泉水,泡面,火腿} 这是一个3项集,项集的出现频度是包含项集的事务数,把它记作支持度计数,通俗的来说,假设有三个顾客分别买了{矿泉水,泡面,火腿}、{矿泉水,泡面,火腿、牛栏山}、{矿泉水,火腿}。那么这个3项集的支持度计数就是2。
  5. 频繁项集:如果我们预定义的支持度计数是2,也就是此时的支持度计数阈值为2,而上述的3项集的支持度计数是2,所以该3项集是频繁项集。
  6. 置信度(关联规则的置信度定义如下):
    在这里插入图片描述

3)简单步骤

关联规则挖掘的步骤分两步:

  1. 找所有的频繁项集。
  2. 根据频繁项集生产强关联规则

OK,理解了Apriori算法的概念和简单步骤,是不是还是很懵逼,蒙蔽就对了,接下来我们用一个例子来详细的理解一下Apriori算法。

Apriori算法举例

接下来用一个例子用apriori算法来走一遍关联规则的流程(本例子预定义的最小支持度为2),下图是事物数据,9个顾客分别买了不同的商品列表(我们假定11表示泡面,12表示矿泉水,13表示牛栏山,14表示雪碧,15表示火腿)。
在这里插入图片描述
首先我们要做的是第一次迭代,扫描所有的事物,也就是计算支持度(及出现的个数),对每个项进行计数得到候选项集,得到如下图所示的结果,记为C1。
在这里插入图片描述
接下来我们要进行第二次迭代,目的是得出频繁2项集,所以要使用连接来产生候选项集2项集。L1<-> L1 得出
在这里插入图片描述
连接这一步,我们把它叫做连接步,连接得到C2后,接下来做的是剪枝步,就是剪掉项集中包含不频繁项的项集,在本例中1项集全部都是频繁项集,例如{11,I2}中没有不频繁项集,此项集不剪,{11,I3}中没有不频繁项集,同理不剪,以此类推。所以C2中所有的项集都不需要剪掉。到此连接步、剪枝步全部完成。(这里值得注意的是剪枝是必须的一步,不能省略)最后再计一下数得出最终的C2。如下图所示。
在这里插入图片描述
将支持度计数小于阈值2的全部剔除,得出频繁2项集L2,如下图所示
在这里插入图片描述
现在开始进行第三次迭代,L2 \bowtie L2 得出候选项集C3,如下图所示
在这里插入图片描述
在这一步同样是经过了连接步和剪枝步。L2自连接得到
在这里插入图片描述
然而除了{11,12,13},{11,12,15}之外。{11,13,15},{12,13,14},{12,13,15},{12,14,15}中都含有不频繁项集,第一个{13,15}不是L2所以要剪枝,后面以此类推,最终得到上图的C3。(再重视一下,这个剪枝不能省略)。最后记一下数,得出最终的候选项集C3。
在这里插入图片描述
得到候选项集C3后与支持度阈值比较,得出频繁3项集L3。
在这里插入图片描述
现在继续第四次迭代,L3 自连接得到 {11,12,13,15} ,接下来剪枝,因为这个项集中{I2,I3,I5}不属于L3,所以剪掉,C4为空了,所以算法到此结束,现在得出了所有的频繁项集。

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

现在我们拿X = {11,12,15}为例,输出关联规则。X的非空子集为{11,12}、{11,15}、{12,15}、{11}、{12}、{15}。所以组合一下关联规则如下:
在这里插入图片描述
置信度我们根据上文提到的公式来算,拿第一个{11,12} => 15为例。
confidence = P(15 | {11,12})= support_count({12 , 11, 15}) / support_count({11,12})
通过查找L3,{11,12,15}的支持度计数为2,通过查L2,{11,12}的支持度计数为4。即最终可以计算出confidence = = 50%。剩下的以此类推,假定我们预定义70%的置信度。在这些规则中,我们可以输出强关联规则的只有三个。即三个100%置信度的规则。那么我们可以得到买泡面和火腿的一定会买矿泉水,买矿泉水和火腿的一定会买泡面,买火腿的一定会买泡面和矿泉水这三个关联规则。

是不是觉得容易理解很多,简单点说,就是先定义一个最小支持度,然后从每个项遍历取一个,二个,三个…对他们进行排列组合,如果经过排列组合的项的支持度满足最小支持度,则保留下来,否则则舍去。知道没有排列组合满足最小支持度为止,做到这里,就已经完成了找到所有频繁项集的过程。接下来就是依据置信度公式计算置信度。

算法评价

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

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

看了这么多理论是不是想要实践一下。下一篇可能会对你有所帮助。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值