关联分析
- Apriori算法
优点:易编码实现。
缺点:在大数据集上可能较慢。
适用数据类型:数值型或者标称型数据。
关联分析是一种在大规模数据集中寻找有趣关系的任务。这些关系可以有两种形式:频繁项集或者关联规则。 频繁项集( frequent item sets)是经常出现在一块的物品的集合, 关联规则( association rules)暗示两种物品之间可能存在很强的关系。 一个项集的支持度( support)被定义为数据集中包含该项集的记录所占的比例。 支持度是针对项集来说的,因此可以定义一个最小支持度,而只保留满足最小支持度的项集。可信度或置信度( confidence)是针对一条诸如{尿布} ➞ {葡萄酒}的关联规则来定义的。这条规则的可信度被定义为“支持度({尿布, 葡萄酒})/支持度({尿布})”。 支持度和可信度是用来量化关联分析是否成功的方法。
Apriori 原理
- Apriori算法的一般过程
(1) 收集数据:使用任意方法。
(2) 准备数据:任何数据类型都可以,因为我们只保存集合。
(3) 分析数据:使用任意方法。
(4) 训练算法:使用Apriori算法来找到频繁项集。
(5) 测试算法:不需要测试过程。
(6) 使用算法:用于发现频繁项集以及物品之间的关联规则。
Apriori原理可以帮我们减少可能感兴趣的项集。 Apriori原理是说如果某个项集是频繁的,那么它的所有子集也是频繁的。
对于图11-2给出的例子,这意味着如果{0,1}是频繁的,那么{0}、 {1}也一定是频繁的。这个原理直观上并没有什么帮助,但是如果反过来看就有用了,也就是说如果一个项集是非频繁集,那么它的所有超集也是非频繁的 。
使用 Apriori 算法来发现频繁集
Apriori算法是发现频繁项集的一种方法。 Apriori算法的两个输入参数分别是最小支持度和数据集。该算法首先会生成所有单个物品的项集列表。接着扫描交易记录来查看哪些项集满足最小支持度要求,那些不满足最小支持度的集合会被去掉。然后,对剩下来的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足最小支持度的项集。该过程重复进行直到所有项集都被去掉。
在使用Python来对整个程序编码之前,需要创建一些辅助函数。下面会创建一个用于构建初始集合的函数,也会创建一个通过扫描数据集以寻找交易记录子集的函数。
数据集扫描的伪代码大致如下:
对数据集中的每条交易记录tran
对每个候选项集can:
检查一下can是否是tran的子集:
如果是,则增加can的计数值
对每个候选项集:
如果其支持度不低于最小值,则保留该项集
返回所有频繁项集列表
整个Apriori算法的伪代码如下:
当集合中项的个数大于0时
构建一个k个项组成的候选项集的列表
检查数据以确认每个项集都是频繁的
保留频繁项集并构建k+1项组成的候选项集的列表
从频繁项集中挖掘关联规则
频繁项集的量化定义,即它满足最小支持度要求。对于关联规则,我们也有类似的量化方法,这种量化指标称为可信度。一条规则P ➞ H的可信度定义为support(P | H)/support§。记住,在Python中,操作符|表示集合的并操作,而数学上集合并的符号是 U。P | H是指所有出现在集合P或者集合H中的元素。前面一节已经计算了所有频繁项集支持度。现在想获得可信度,所需要做的只是取出那些支持度值做一次除法运算。
从一个频繁项集中可以产生多少条关联规则?图11-4的网格图给出的是从项集{0,1,2,3}产生的所有关联规则。为找到感兴趣的规则,我们先生成一个可能的规则列表,然后测试每条规则的可信度。如果可信度不满足最小要求,则去掉该规则 。
我们可以为每个频繁项集产生许多关联规则。如果能够减少规则数目来确保问题的可解性,那么计算起来就会好很多。可以观察到,如果某条规则并不满足最小可信度要求,那么该规则的所有子集也不会满足最小可信度要求。以图11-4为例,假设规则0,1,2 ➞ 3并不满足最小可信度要求,那么就知道任何左部为{0,1,2}子集的规则也不会满足最小可信度要求。在图11-4中这些规则上都加了阴影来表示。
示例:发现国会投票中的模式
在美国国会投票记录中发现关联规则
(1) 收集数据:使用votesmart模块来访问投票记录。
(2) 准备数据:构造一个函数来将投票转化为一串交易记录。
(3) 分析数据:在Python提示符下查看准备的数据以确保其正确性。
(4) 训练算法:使用本章早先的apriori()和generateRules()函数来发现投票记录中的有趣信息。
(5) 测试算法:不适用,即没有测试过程。
(6) 使用算法:这里只是出于娱乐的目的,不过也可以使用分析结果来为政治竞选活动服务,或者预测选举官员会如何投票。
本章小结
关联分析是用于发现大数据集中元素间有趣关系的一个工具集,可以采用两种方式来量化这些有趣的关系。第一种方式是使用频繁项集,它会给出经常在一起出现的元素项。第二种方式是关联规则,每条关联规则意味着元素项之间的“如果……那么”关系。
发现元素项间不同的组合是个十分耗时的任务,不可避免需要大量昂贵的计算资源,这就需要一些更智能的方法在合理的时间范围内找到频繁项集。能够实现这一目标的一个方法是Apriori 算法,它使用Apriori原理来减少在数据库上进行检查的集合的数目。 Apriori原理是说如果一个元素项是不频繁的,那么那些包含该元素的超集也是不频繁的。 Apriori算法从单元素项集开始,通过组合满足最小支持度要求的项集来形成更大的集合。支持度用来度量一个集合在原始数据中出现的频率。
关联分析可以用在许多不同物品上。商店中的商品以及网站的访问页面是其中比较常见的例子。关联分析也曾用于查看选举人及法官的投票历史。