Apriori算法的Python实现

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


前言

本人代码能力确实有限,算法实现比较粗糙,并且在实现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] =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值