从大规模数据集中寻找物品间的隐含关系被称作关联分析或者关联规则分析。这里主要问题在于找到物品的所有组合十分耗时,所以本章介绍Apriori来用更智能的方法解决这个问题。
11.1关联分析
关联分析是一种在大规模数据集中寻找有趣关系的任务,这种关系可以有两种形式:频繁项集或者关联规则。频繁项集是经常出现在一起的物品的集合。关联规则暗示两种物品之间可能存在很强的关系。
对“频繁”需要有量化标准。于是,有了支持度和可信度的概念。一个项集的支持度,是指数据集中包含该项集的记录所占的比例。可信度或者置信度,是针对“A—>B”的关联规则定义的。它被定义为“支持度{A,B}/支持度{A}”,若得到是值是x%,即表明对于包含A的所有记录,我们的规则对其中x%都适用。
11.2 Apriori原理
一个集合的支持度是指由多少比例的交易记录包含该集合。而随着物品数目的增加,遍历次数会急剧增长,计算会十分费时。
为解决这个问题,研究人员提出了Apriori原理。Apriori原理就是说如果某个项集是频繁的,那么它的所有子集都是频繁的,反之,如果某个项集是非频繁的,那么它的所有超集都是非频繁的。这样,当我们计算出某个项集是非频繁的,就不用再计算其超集。这样可以避免项集数目的指数增长,从而在合理时间内算出频繁项集。
11.3 使用Apriori算法来发现频繁集
Apriori算法是发现频繁集的一种方法。其大概思路是:首先生成所有单个物品的项集列表。接着扫描交易记录查看哪些项集满足最小支持度要求,哪些不满足最小支持度要求的集合会被去掉。然后,对剩下的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足最小支持度的项集。该过程重复进行直到所有项集被去掉。
11.3.1 生成候选项集
先构建辅助函数,扫描交易记录,过滤后得到包含一个元素的满足最小支持度的项集。此处,L1就是包含一个元素的满足最小支持度的项集,suppData0是候选项集及其支持度组成的字典。
11.3.2 组织完整的Apriori算法
这里我们用aprioriGen函数来对候选项集进行组合得到多种不重复的候选项集。用apriori函数来得到满足最小支持度的项集组成的列表L和一个候选项集及其支持度组成的字典suppData。
11.4 从频繁项集中挖掘关联规则
上一节介绍如何利用Apriori算法来发现频繁项集,现在要解决的问题的如何找出关联规则。关联规则的量化指标是可信度。规则P->H的可信度定义为support(p | H)/support(p)。所以计算可信度需要用到上一节计算出的支持度。
为了找出感兴趣的规则,我们需要生成所有可能的规则,然后测试每一条规则的可信度,如果不满足最小可信度,则去掉该规则。同时我们注意到,如果某条规则不满足最小可信度要求,那么该规则的所有子集也不会满足最小可信度要求。
该算法返回的rules是满足最小可信度的关联规则,即(前件、后件、可信度)元祖组成的列表
11.5 本章小结
关联分析是发现大数据集中元素之间有趣关系的一个工具集,可以采用两种方式来量化这些有趣的关系。第一种是频繁项集,第二种是关联规则。
费选哪个元素项间的不同组合是十分耗时的任务,因此Apriori原理就是如果一个元素是不频繁的,那么包含该元素的超集也是不频繁的。
每次增加频繁项集的大小,Apriori算法会重新扫描整个数据集。当数据集很大时,会显著降低频繁项集发现的速度。和Apriori算法相比,下一章要介绍的FP-growth算法只需要对数据库进行两次遍历,能够显著加快发现频繁项集的速度。