【机器学习实战】 使用Apriori算法进行关联分析

转载请注明作者和出处: https://blog.csdn.net/weixin_37392582
代码地址: https://gitee.com/wuweijun
开发平台: Win10 + Python3.6 + Anaconda3
编  者: 无尾



一、前言

  在取杂货店买东西的过程,实际包含了许多机器学习的当前及未来应用,这包括物品的展示方式、购物之后优惠卷的提供以及用户忠诚度计划,等等。它们都离不开对大量数据的分析。商店希望从顾客身上获得尽可能多的利润,所以它们必然会利用各种技术来达到这一目的。
忠诚度计划是指顾客使用会员卡可以获得一定的折扣,利用这种计划,商店可以了解客户所购买的商品。即使客户不使用会员卡,商店也会查看客户购买商品所使用的信用卡记录。如果顾客不使用信用卡而使用现金付账,商店则可以查看顾客一起购买的商品。
  通常查看哪些商品经常在一起购买,可以帮助商店了解用户的购买行为。这种从数据海洋中抽取的只是可以用于商品定价、市场促销、存货管理等环节。从大规模数据集中寻找物品间的隐含关系被称作关联分析(association analysis)或者关联规则学习(association rule learning)。这里的主要问题在于,寻找物品的不同组合是一项十分耗时的人物,所需的计算代价很高,蛮力搜索方法并不能解决这个问题,所以需要用更智能的方法在合理的时间范围内找到频繁项集。本章将介绍如何使用Apriori算法来解决上述问题。
  下面首先详细讨论关联分析,然后讨论Apriori原理,Apriori算法正式基于该原理得到的。接下来创建函数频繁项集高效发现的函数,然后从频繁项集中抽取出关联规则。本章最后给出的两个例子,一个是从国会投票记录中抽取出关联规则,另一个是发现毒蘑菇的共同特征。

1、关联分析

Apriori算法
优点:易编码实现
缺点:在大数据集上可能较慢
适用数据类型:数值型或者标成型数据

  关联分析时一种在大规模数据集中寻找有趣关系的任务。这些关系可以有两种形式:频繁项集或者关联规则。频繁项集(frequent item sets)时经常出现在一块的物品的集合,关联规则(association rules)暗示两种物品之间可能存在很强的关系。下面会用一个例子来说明这两种概念。

交易号码商品
0豆奶,莴笋
1莴笋,尿布
2豆奶,尿布,啤酒,甜菜
3莴笋,豆奶,尿布,啤酒
4莴笋,豆奶,尿布,橙汁

  频繁项集是指经常出现在一起的物品集合,如{豆奶,尿布}就是一个频繁项集,我们可以找到诸如尿布→豆奶(参考尿布与啤酒的故事)这样的关联规则,这意味着如果有人买了尿布,那么他很可能也会买豆奶。使用频繁项集和关联规则商家可以更好的理解他们的顾客,尽管大部分关联规则分析的实例来自零售业,但该技术同样可以用于其它行业,比如网站流量分析以及医药行业。
  应该如何定义这些有趣的关系?谁来定义什么是有趣?当寻找频繁项集时,频繁(frequent)的定义是什么? 有许多概念可以解答上述问题,不过其中最重要的时支持度和可信度。
  一个项集的支持度(support)被定义为数据集中包含该项集的记录所占的比例。如{豆奶}的支持度为 45 4 5 {豆奶,尿布}的支持度为 35 3 5 。支持度是针对项集来说的,因此可以定义一个最小支持度,而只保留满足最小支持度的项集。
  可信度或置信度(confidence)是针对一条诸如{尿布}→{豆奶}的关联规则来定义的。这条规则的confidence被定义为

support(尿)support(尿) s u p p o r t ( 尿 布 , 豆 奶 ) s u p p o r t ( 尿 布 )
可以计算出可信度为 35 3 5 ÷ 45 4 5 = 34 3 4 ,这就意味着对于所有包含“尿布”的记录,我们的规则对其中的75%都适用。
  假设想找到支持度大于0.8的所有项集,应该如何去做?一个办法是生成一个物品所有可能的清单,然后对每一种组合统计出它出现的频繁程度。但当物品成千上万时,上述做法非常非常慢。下面会详细分析这种情况并讨论Apriori原理,该原理会减少关联规则学习时所需的计算量。

2、Apriori原理

  假设我们在经营一家商品种类并不多的杂货店,我们对那些经常在一起被购买的商品非常感兴趣.我们只有4种商品:商品0,商品1,商品2,商品3。那么所有可能被一起购买的商品组合都有哪些?这些商品组合可能只有一种商品,比如商品0,也可能包括两种、三种或者所有四种商品。我们并不关心某人买了两件商品0以及四件商品2的情况,我们只关心他购买了一种或多种商品。

Apriori算法的一般过程
(1)收集数据:使用任意方法。
(2)准备数据:任何数据类型都可以,因为我们只保存集合。
(3)分析数据:使用任意方法。
(4)训练算法:使用Apriori算法来找到频繁项集。
(5)测试算法:不需要测试过程。
(6)使用算法:用于发现频繁相机以及物品之间的关联规则。

3、使用Apriori算法来发现频繁集

  前面提到,关联分析的目标包括两项:发现频繁项集和发现关联规则。首先需要找到频繁项集,然后才能获得关联规则。本节将只关注于发现频繁项集。
  Apriori算法是发现频繁项集的一种方法。Apriori算法的两个输入参数分别是最小支持度和数据集。该算法首先会生成所有单个物品的项集列表。接着扫描交易记录来查看哪些项集满足最小支持度要求,那些不满足最小支持度的集合会被去掉。然后,对剩下来的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足最小支持度的项集。该过程重复进行直到所有项集都被去掉。
  (1)生成候选项集
  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值