前言
本人代码能力确实有限,算法实现比较粗糙,并且在实现Apriori算法的时候,写了之后才想到了更好的实现方法,但是当时已经凌晨两点了,就懒得再改了,这也导致后续跑大数据集的时候很慢!!!!算法的原理主要是根据人民邮电出版社出版的《数据挖掘与分析 概念与算法》一书中p192,算法8.2
一、环境配置
这里我是用的是Anaconda3 python=3.7的环境,如果没有能力装Anaconda的话,只要一个pyhton=3.7的解释器就够用。具体调用的库函数,大家在编译调试的时候可以根据遇到的BUG进行导入,如有问题可以私信或评论。
二、读入文件
1.数据集格式
要求每个事务单独一行,项与项之间有一空格,文件格式为txt格式:
A B D E
B C E
A B D E
A B C E
A B C D E
B C D
2.读入数据
代码如下(示例):
def ReadDataset(filename):
#读入数据,dataset = [[项集1],[项集2],……,[项集n]]
file = open(filename)
line = ""
line_list = []
dataset = []
while 1:
line = file.readline()
if not line:
break
else:
line_list = line.split()
dataset.append(line_list)
# for i in dataset:
# print(i)
return dataset
该处可能需要导入一些库,大家注意下。
三、Apriori
def CountI(D):#计算字母表alphabet
I = []
for itemset in D:
for item in itemset:
if item in I:
continue
else:
I.append(item)
# print(I)
return I
def Apriori(D,I,minsup):
#初始化参数F,C[0],
F = {
'0':["null"]}
C = [{
0:["null",len(D)]}]
# 初始化参数C[1],用单个项初始化前缀树
C1 = {
}
# 通过sup(i)<-0,使得i成为C[0]中的子集的子节点,其实也就是把项集全部添加进去
for i in range(len(I)):
C1[i] = [[I[i]],0]
C.append(C1)
k = 1#k代表层数
while C[k] != {
}:
poplist = []
C[k] =

本文介绍了使用Python实现Apriori算法的过程,包括环境配置、数据读取、Apriori算法详细步骤以及代码实现。作者指出由于Python的运行速度较慢,在处理大数据集时效率较低,对于500万条数据的运行时间达到了30分钟。
最低0.47元/天 解锁文章
1985

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



