頻繁模式挖掘Apriori初學詳解

2021-07-04 07:19:38 字數 2413 閱讀 4175

#coding:utf-8

import itertools

class apriori:

def __init__(self,min_sup=0.2,datadic={}):

self.data = datadic

self.size = len(datadic) #get the number of events

self.min_sup = min_sup

self.min_sup_val = min_sup * self.size #這個數值是頻繁演算法的分子整數部分

def find_frequent_1_itemsets(self):

freqdic = {} # 不管頻繁度如何,先計算頻繁度,然後裝到這裡面

for event in self.data: #event表示字典裡的鍵值,比如t100

for item in self.data[event]:

if item in freqdic: #該成員是否出現過,出沒出現過都要對它進行賦值

freqdic[item] += 1 #出現過則+1

else:

freqdic[item] = 1 #沒出現過則初始值為1

l1 =

for itemset in freqdic: #遍歷第一輪「頻繁」的成員

if itemset >= self.min_sup_val: #如果頻繁度大於設定值

return l1

def has_infrequent_subset(self,c,l_last,k):

subsets = list(itertools.combinations(c,k-1)) #return list of tuples of items

for each in subsets:

each = list(each) #change tuple into list

if each not in l_last:

return true

return false

def apriori_gen(self,l_last): #l_last means frequent(k-1) itemsets 難點!!!

k = len(l_last[0]) + 1 #len()對於列表,則返回成員的個數 如['i1','i2']就返回2

ck = #候選項集集合

for itemset1 in l_last: #迴圈遍歷l_last中的成員

for itemset2 in l_last:

#join step

flag = 0

for i in range(k-2):

if itemset1[i] != itemset2[i]:

flag = 1 #the two itemset can't join

break

if flag == 1:

continue

if itemset1[k-2] < itemset2[k-2]:

c = itemset1 + [itemset2[k-2]] #例:['i1']<['i2']成立,則推入乙個['i1','i2'],並且先不計算它的頻繁度

else:

continue

#pruning setp

if self.has_infrequent_subset(c,l_last,k):

continue

else:

return ck

def do(self):

l_last = self.find_frequent_1_itemsets()

l = l_last

i = 0

while l_last != :

ck = self.apriori_gen(l_last)

freqdic = {}

for event in self.data:

#get all suported subsets

for c in ck:

if set(c) <= set(self.data[event]):#is subset

if tuple(c) in freqdic:

freqdic[tuple(c)]+=1

else:

freqdic[tuple(c)]=1

print freqdic

lk =

for c in freqdic:

if freqdic[c] > self.min_sup_val:

l_last = lk

l += lk

return l

#******test******

data =

a=apriori(datadic=data)

print a.do()

頻繁模式挖掘 Apriori演算法

dm實驗,寫的比較二,好多情況還沒有考慮,後續有時間會修改。開始的時候資料結構沒設計好導致寫到後面費了很大的勁 不過還好python的列表有起死回生的功效 資料集 database.txt i1,i2,i5 i2,i4 i2,i3 i1,i2,i4 i1,i3 i2,i3 i1,i3 i1,i2,i...

頻繁模式挖掘Apriori演算法詳解

本資料探勘演算法是本人進入研究生學習階段進行的第一項 比較難 的學習,下文除了源 有參考zealseeker博主之外均為原創手打,如有 寫的不嚴謹,望請諒解。首先頻繁模式 frequent patten 表示頻繁的出現在資料集中的模式,舉個例子,去燒烤攤點串,這種選單上的內容就是一種頻繁模式,因為會...

頻繁項集挖掘之apriori和fp growth

apriori和fp growth是頻繁項集 frequent itemset mining 挖掘中的兩個經典演算法,主要的區別在於乙個是廣度優先的方式,另乙個是深度優先的方式,後一種是基於前一種效率較低的背景下提出來的,雖然都是十幾年前的,但是理解這兩個演算法對資料探勘和學習演算法都有很大好處。在...