Apriori算法是Agrawl和R.Srikant于1994年提出的,为布尔关联规则挖掘频繁项集的原创性算法[AS94b]。该算法使用了频繁项集性质的先验知识,使用了一种称为逐层迭代方法。为了提高频繁项集逐层产生的效率,该算法使用了先验性质 用于压缩搜索空间。
先验性质 :频繁项集的所有非空子集也一定是频繁的。
Apriori算法挖掘频繁项集主要由两步组成——连接步 和剪枝步 。
参考链接:关联规则,Apriori算法及python实现
原文中没有进行剪枝的操作,本文主要添加了剪枝部分的代码,通过遍历候选项集的子集,加入该项的子集不在频繁项集中,则该项不是频繁项,将其删去。
# -*- coding: utf-8 -*-
import copy
def PowerSetsBinary(items):
"""
找出集合的所有子集
"""
#generate all combination of N items
N = len(items)
#enumerate the 2**N possible combinations
for i in range(2**N):
combo = []
for j in range(N):
#test jth bit of integer i
if(i >> j ) % 2 == 1:
combo.append(items[j])
yield combo
def loadDataSet():
"""
创建一个用于测试的简单的数据集
"""
D = [[1, 2, 5], [2, 4], [