Eclat算法Python实现
Eclat算法是Zaki博士于2000年提出了来的,利用垂直数据库和数据格,采用前缀等价关系划分搜索空间,Eclat算法只需要1次扫描数据库,利用数据垂直表示形式的优势通过交叉计数来计算支持度,能够很快地挖掘出频繁集。
下面是Eclat算法的Python实现代码:
//EclatOne.py
#-*- coding: UTF-8 -*-
import sys
import time
type = sys.getfilesystemencoding()
from sys import argv
def eclat(prefix, items):
while items:
i,itids = items.pop()
isupp = len(itids)
if isupp >= minsup:
print sorted(prefix+[i]), ':', isupp
suffix = []
for j, ojtids in items:
jtids = itids & ojtids
if len(jtids) >= minsup:
suffix.append((j,jtids))
eclat(prefix+[i], sorted(suffix, key=lambda item: len(item[1]), reverse=True))
data = {}
#str1 = './datasets/T10I4D100K.dat'
str1 = './datasets/mushroom.dat'
#minsup = int(argv[2])
#minsup = 5
##支持度
ratio = 0.35
minsup = 8124*ratio
trans = 0
#f = open(argv[1], 'r')
f = open(str1)
for row in f:
trans += 1
for item in row.split():
if item not in data:
data[item] = set()
data[item].add(trans)
f.close()
##计算运行的时间
start = time.clock()
eclat([], sorted(data.items(), key=lambda item: len(item[1]), reverse=True))
end = time.clock()
print "run time: %f s" % (end-start)
对mushroom.dat数据集,设置最小支持度为0.35,得到的频繁集如下:
http://download.csdn.net/detail/sanqima/9538348
该工程也包含Mushroom、connect、movieItem、retail、T10I4D100K、T20I6D300K、kosarakt数据集,其中数据集Mushroom是包含22种蘑菇品种,8124条记录;connect是稠密数据集,T10I4D100K、T20I6D300K是由IBM数据产生器生成的。
转载请注明:数据分析 » Eclat算法Python实现_python数据分析