非常简单的关联规则的基础算法,Apriori算法的python实现
判断可连接性的规则:
先判断两个频繁k?1k?1项集是否是可连接的,可连接的定义是这样:对于两个频繁k?1k?1项集l1,l2l1,l2,先将项集中的项排序(比如字典序),如果l1,l2l1,l2的前k?2k?2项都相等,则l1,l2l1,l2可连接
如果两个频繁k?1k?1项集l1,l2l1,l2可连接,则用它们生成一个新的kk项集:{l1[1],l1[2],…,l1[k?2],l1[k?1],l2[k?1]}{l1[1],l1[2],…,l1[k?2],l1[k?1],l2[k?1]},其实就是用他们相同的前k?2k?2项加上不同的各自末尾两项,这个过程由式子l1×l2l1×l2表示。这样,我们只需找到所有的C2nCn2个两两组合(nn为Lk?1Lk?1的长度),挑出其中可连接的,就能生成所有可能是频繁项集的kk项集,它们就是频繁kk项集的候选,这些候选构成的集合记为Ck
#Design by Zarkpx
#Email:zarkpx@gmail.com
import numpy as py
import pandas as pd
import random as rd
item = [[1],[2],[3],[4],[5]]
T = [[1,2,5],[2,4],[2,3],[1,2,4],[1,3],[2,3],[1,3],[1,2,3,5],[1,2,3],[2,4],[2,3,4],[2,3,4]]
one_num = []
freq_list=[]
min_sup = 2
for i in range(len(item)):
one_num.append(0)
def count_one():
for i in T:
for j in i:
for m in range(len(item)):
if j == item[m][0]:
one_num[m]+=1
else:
continue
def count_other(new_freq):
num = []
for i in range(len(new_freq)):
num.append(0)
for i in T:
for j in range(len(new_freq)):
if new_freq[j]==i:
num[j]+=1
return num
def delete(sub_freq,num_list):
sub_freq_swap = []
sub_freq_swap.extend(sub_freq)
for i in range(len(num_list)):
if num_list[i] < min_sup:
sub_freq_swap.remove(sub_freq[i])
freq_list.append(sub_freq_swap)
def link(k):
sub_freq = freq_list[k-1]
new_freq=[]
for i in range(len(sub_freq)):
a = []
a.extend(sub_freq[i])
a.remove(a[-1])
for j in range(i+1,len(sub_freq)):
b = []
b.extend(sub_freq[j])
b.remove(b[-1])
if a == b:
c = []
c.extend(sub_freq[i])
#print(c)
#print(sub_freq[j][-1])
c.append(sub_freq[j][-1])
new_freq.append(c)
return new_freq
count_one()
delete(item,one_num)
new = link(1)
two_num = count_other(new)
#print(two_num)
delete(new,two_num)
new = link(2)
three_num = count_other(new)
delete(new,three_num)
print("最小支持阈值:",min_sup)
print("频繁项集:",freq_list)
print("----------------")
print("频繁1-项集:",freq_list[0])
print("频繁1-项集对应元素出现次数:",one_num)
print("----------------")
print("频繁2-项集:",freq_list[1])
print("频繁2-项集对应元素出现次数:",two_num)
print("----------------")
print("频繁3-项集:",freq_list[2])
本文深入探讨了Apriori算法的实现原理,这是一种用于挖掘频繁项集和关联规则的算法。文章通过Python代码展示了如何从交易数据中找出频繁项集,并详细解释了可连接性规则及其应用。
927

被折叠的 条评论
为什么被折叠?



