您的位置:首页 > 编程语言 > Python开发

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

2018-03-27 16:19 375 查看
转载请注明作者和出处: https://blog.csdn.net/weixin_37392582

代码地址: https://gitee.com/wuweijun

开发平台: Win10 + Python3.6 + Anaconda3

编  者: 无尾

一、前言
1、关联分析

2、Apriori原理

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

一、前言

  在取杂货店买东西的过程,实际包含了许多机器学习的当前及未来应用,这包括物品的展示方式、购物之后优惠卷的提供以及用户忠诚度计划,等等。它们都离不开对大量数据的分析。商店希望从顾客身上获得尽可能多的利润,所以它们必然会利用各种技术来达到这一目的。

忠诚度计划是指顾客使用会员卡可以获得一定的折扣,利用这种计划,商店可以了解客户所购买的商品。即使客户不使用会员卡,商店也会查看客户购买商品所使用的信用卡记录。如果顾客不使用信用卡而使用现金付账,商店则可以查看顾客一起购买的商品。

  通常查看哪些商品经常在一起购买,可以帮助商店了解用户的购买行为。这种从数据海洋中抽取的只是可以用于商品定价、市场促销、存货管理等环节。从大规模数据集中寻找物品间的隐含关系被称作关联分析(association analysis)或者关联规则学习(association rule learning)。这里的主要问题在于,寻找物品的不同组合是一项十分耗时的人物,所需的计算代价很高,蛮力搜索方法并不能解决这个问题,所以需要用更智能的方法在合理的时间范围内找到频繁项集。本章将介绍如何使用Apriori算法来解决上述问题。

  下面首先详细讨论关联分析,然后讨论Apriori原理,Apriori算法正式基于该原理得到的。接下来创建函数频繁项集高效发现的函数,然后从频繁项集中抽取出关联规则。本章最后给出的两个例子,一个是从国会投票记录中抽取出关联规则,另一个是发现毒蘑菇的共同特征。

1、关联分析

Apriori算法
优点:易编码实现
缺点:在大数据集上可能较慢
适用数据类型:数值型或者标成型数据
  关联分析时一种在大规模数据集中寻找有趣关系的任务。这些关系可以有两种形式:频繁项集或者关联规则。频繁项集(frequent item sets)时经常出现在一块的物品的集合,关联规则(association rules)暗示两种物品之间可能存在很强的关系。下面会用一个例子来说明这两种概念。

交易号码商品
0豆奶,莴笋
1莴笋,尿布
2豆奶,尿布,啤酒,甜菜
3莴笋,豆奶,尿布,啤酒
4莴笋,豆奶,尿布,橙汁
  频繁项集是指经常出现在一起的物品集合,如{豆奶,尿布}就是一个频繁项集,我们可以找到诸如尿布→豆奶(参考尿布与啤酒的故事)这样的关联规则,这意味着如果有人买了尿布,那么他很可能也会买豆奶。使用频繁项集和关联规则商家可以更好的理解他们的顾客,尽管大部分关联规则分析的实例来自零售业,但该技术同样可以用于其它行业,比如网站流量分析以及医药行业。

  应该如何定义这些有趣的关系?谁来定义什么是有趣?当寻找频繁项集时,频繁(frequent)的定义是什么? 有许多概念可以解答上述问题,不过其中最重要的时支持度和可信度。

  一个项集的支持度(support)被定义为数据集中包含该项集的记录所占的比例。如{豆奶}的支持度为4545{豆奶,尿布}的支持度为3535。支持度是针对项集来说的,因此可以定义一个最小支持度,而只保留满足最小支持度的项集。

  可信度或置信度(confidence)是针对一条诸如{尿布}→{豆奶}的关联规则来定义的。这条规则的confidence被定义为support(尿布,豆奶)support(尿布)support(尿布,豆奶)support(尿布)可以计算出可信度为3535÷4545=3434,这就意味着对于所有包含“尿布”的记录,我们的规则对其中的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)生成候选项集

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息