主要内容:Apriori算法、频繁项集生成、关联规则生成、投票中的关联规则发现
缺点:是在大数据集上可能较慢。
当寻找频繁项集时,有两个概念比较重要:支持度和可信度。
交易号码 | 商品 |
0 | 豆奶, 莴苣 |
1 | 莴苣,尿布,葡萄酒,甜菜 |
2 | 莴苣,尿布,葡萄酒,橙汁 |
3 | 莴苣,豆奶,尿布,葡萄酒 |
4 | 莴苣,豆奶,尿布,橙汁 |
支持度:一个项集的支持度(support)被定义为数据集中包含该项集的记录占总记录的比例。从表1 可以看出 项集 {豆奶} 的支持度为 4/5; 而在 5 条交易记录中 3 条包含 {豆奶,尿布},因此 {豆奶,尿布} 的支持度为 3/5.
可信度或置信度(confidence):是针对一条诸如尿布−−>葡萄酒尿布−−>葡萄酒的关联规则来定义的,这条规则的可信度被定义为“ 支持度({尿布,葡萄酒}) / 支持度({尿布})”。在表1 中可以发现 {尿布,葡萄酒} 的支持度是 3/53/5, {尿布} 的支持度为 4/54/5, 所以关联规则 “尿布 --> 葡萄酒”的可信度为 3/4=0.753/4=0.75, 意思是对于所有包含 "尿布"的记录中,该关联规则对其中的 75% 记录都适用。
因为网上的代码和原著的代码运行后会报一些错误,所以本文修改了两个地方,将C1和D都强制转换为list类型,程序才能正常运行。
# 构建第一个候选项集列表C1
C1 = list(createC1(myDat))
# 构建集合表示的数据集 D
D = list(map(set, myDat))
apriori.py
def loadDataSet():
'''创建一个用于测试的简单的数据集'''
return [ [ 1, 3, 4 ], [ 2, 3, 5 ], [ 1, 2, 3, 5 ], [ 2, 5 ] ]
def createC1( dataSet ):
'''
构建初始候选项集的列表,即所有候选项集只包含一个元素,
C1是大小为1的所有候选项集的集合
'''
C1 = []
for transaction in dataSet:
for item in transaction:
if [ item ] not in C1:
C1.append( [ item ] )
C1.sort()
return map( frozenset, C1 )
def scanD( D, Ck, minSupport ):
'''
计算Ck中的项集在数