Eclat算法Python實現

  Eclat算法是Zaki博士於2000年提出了來的,利用垂直數據庫和數據格,採用前綴等價關係劃分搜索空間,該算法只需要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數據產生器生成的。

  參考地址:http://adrem.ua.ac.be/~goethals/software/

發佈了524 篇原創文章 · 獲贊 798 · 訪問量 208萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章