本章内容:
- Apriori算法
- 频繁项集生成
- 关联规则生成
- 投票中的关联规则发现
从大规模数据集中寻找物品间的隐含关系被称作关联分析(association analysis)或者关联规则学习(association rule learning)。寻找物品的不同组合十分耗时,计算代价高,蛮力搜索方法不能解决这个问题。使用Apriori算法可解决这个问题。
一、关联分析
关联分析是一种在大规模数据集中寻找有趣关系的任务。这些关系有两种形式:频繁项集、关联规则。频繁项集(frequent item sets)是经常出现在一块的物品的集合;关联规则(association rules)暗示两种物品之间可能存在很强的关系。
一个项集的支持度(support)被定义为数据集中包含该项集的记录所占的比例。可定义一个最小支持度,只保留满足最小支持度的项集。
可信度或置信度(confidence)是针对一条关联规则来定义的。例如:{尿布, 葡萄酒}的支持度为3/5,尿布的支持度为4/5,所以“尿布->葡萄酒”的可信度为3/4=0.75。
支持度和可信度是用来量化关联分析是否成功的方法。
二、Apriori原理
一个商店的目标是找到经常在一起购买的物品集合,可使用集合的支持度来度量其出现频率。一个集合的支持度是指有多少比例的交易记录包含该集合。这需要遍历数据记录,而随着物品数目的增加,遍历次数会急剧增长。对于包含N中物品的数据集共有 2N−1 中项集组合,对于只出售100中商品的商店也会有 1.26×1030 中可能的项集组合。对于现代计算机,需要很长的时间才能完成运算。
Apriori可以减少感兴趣的项集。Apriori原理:如果某个项集是频繁的,那么它的所有子集也是频繁的。反过来,如果一个项集是非频繁集,那么它的所有超集也是非频繁的。
三、使用Apriori算法发现频繁集
关联分析的目标包括:发现频繁集和发现关联规则。首先要找到频繁项集,然后才能获得关联规则。
Apriori是发现频繁集的一种方法,它的两个输入参数分别是最小支持度和数据集。首先,该算法会生成所有单个物品的项集列表。接着,扫描交易记录来查看哪些项集满足最小支持度要求,去掉不满足最小支持度的集合。然后,对剩下来的集合进行组合以生成包含两个元素的项集。接下来,再重新扫描交易记录,去掉不满足最小支持度的项集。该过程重复进行直到所有项集都被去掉。
3-1 生成候选项集
创建一个用于构建初始集合的函数,也会创建一个通过扫描数据集以寻找交易记录子集的函数。数据集扫描的伪代码大致如下:
对数据集中的每条交易记录tran
对每个候选项集can :
检查一下can是否是tran的子集 :
如果是,则增加can的计数值
对每个候选项集 :
如果其支持度不低于最小值,则保留该项集
返回所有频繁项集列表
# coding=utf-8
# 创建一个简单的测试数据集
def loadDataSet() :
return [[1,3,4], [2,3,5], [1,2,3,5], [2,5]]
# 构建集合C1,C1是大小为1的所有候选项集的集合。
def createC1(dataSet) :
# C1是空列表,用来存储所有不重复的项值。如果某个物品项没有在C1中出现