apriori算法实例python_频繁项集挖掘Apriori算法及其Python实现

Apriori算法是通过限制候选产生发现频繁项集。

Apriori算法使用一种称为逐层搜索的迭代方法,其中k项集用于探索(k+1)项集。首先,通过扫描数据库,累计每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合,记为L1。然后,使用L1找出频繁2项集的集合L2,使用L2找出L3,如此下去,直到不能再找到频繁k项集。

为了提高频繁项集逐层产生的效率,一种称为先验性质(Apriori property)的重要性质用于压缩搜索空间。

先验性质:频繁项集的所有非空子集也一定是频繁的。

其实,算法的描述理解起来是困难的,有例子帮助理解最好不过。恩,盗图一张。

00103435ef89

20130609110737296.png

Python实现:

我们的期望:

输入:数据库中数据和最小支持度

输出:频繁项集

例:

输入:数据,[['A','B','C','D'],['B','C','E'],['A','B','C','E'],['B','D','E'],['A','B','C','D']];最小支持度:0.7

输出:[['B'], ['C'], ['B', 'C']]

写一个方法 def apriori(D, minSup),参数D就是输入的数据库数据,minSup是最小支持度。

def apriori(D, minSup):

'''频繁项集用keys表示,

key表示项集中的某一项,

cutKeys表示经过剪枝步的某k项集。

C表示某k项集的每一项在事务数据库D中的支持计数

'''

#先求出1项集的集合及其支持计数,注意此处C1是字典,key为项集,value是计数,与下不同,下的C是列表只有计数

C1 = {}

for T in D:

for I in T:

if I in C1:

C1[I] += 1

else:

C1[I] = 1

_keys1 = C1.keys()

#此处对keys的存储格式进行处理,为了方便后边由此得出k+1项集的集合

keys1 = []

for i in _keys1:

keys1.append([i])

n = len(D)

cutKeys1 = []

#对keys1(1项集)进行剪枝步

for k in keys1[:]:

if C1[k[0]]*1.0/n >= minSup:

cutKeys1.append(k)

cutKeys1.sort()

总之,对于1项集要进行特殊处理,然后再用迭代的方法求k+1项集。

好,迭代来了:

all_keys = []

while keys != []:

C = getC(D, keys)

cutKeys = getCutKeys(keys, C, minSup, D)

for key in cutKeys:

all_keys.append(key)

keys = aproiri_gen(cutKeys)

return all_keys

注意,all_keys是全局变量,存储所有通过剪枝步的k项集。

函数getC(D, keys)是对keys中的每一个key进行计数,函数getCutKeys(keys, C, minSup, D)是剪枝步的实现,函数aproiri_gen(cutKeys)是由k项集获得k+1项集(连接步)。

这样,算法Apriori就实现了,输入输出试一下:

D = [['A','B','C','D'],['B','C','E'],['A','B','C','E'],['B','D','E'],['A','B','C','D']]

F = apriori(D, 0.7)

print '\nfrequent itemset:\n', F

00103435ef89

屏幕快照 2015-05-26 下午5.35.16.png

把最小支持度改成0.5试试:

00103435ef89

屏幕快照 2015-05-26 下午5.36.39.png

恩,没有问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值