数据挖掘习题选做--第六章:Apriori算法、FP-growth

本文是关于数据挖掘概念与技术的习题选做,重点介绍了如何用Python实现Apriori算法,并给出了运行结果。此外,文章还提及了FP-growth算法,但未展开详细讨论,作者承认Apriori实现欠佳,表示会继续努力学习和提升。
摘要由CSDN通过智能技术生成

数据挖掘概念与技术习题选做

第六章习题

这里写图片描述

(1) 用python简单实现Apriori算法

# -*- coding: utf-8 -*-
__author__ = "Yunfan Yang"

def gen_L1(TID):
    """从事务集中产生频繁1项集"""
    initial_C1 = {}        # 定义一个空字典用于统计初始项集信息,键值对形如{"M": 3}

    for tid in TID:
        for item in tid:
            if item not in initial_C1.keys():
                initial_C1[item] = 1
            else:
                initial_C1[item] += 1

    # 候选1项集
    C1 = []
    for key, value in initial_C1.items():
        tmp_tuple = ([key], value)
        C1.append(tmp_tuple)
    # C1结果为[(['M'], 3), (['O'], 4), (['N'], 2), (['K'], 5), (['E'], 4), (['Y'], 3), (['D'], 1), (['A'], 1), (['U'], 1), (['C'], 2), (['I'], 1)]

    # 频繁1项集
    L1 = []
    for item in C1:
        if item[1] / len(TID) >= min_sup:
            L1.append(item)

    # L1结果为[(['M'], 3), (['O'], 4), (['K'], 5), (['E'], 4), (['Y'], 3)]
    return L1

def generateC_k(Lk_1):
    """产生候选k项集的函数"""
    C_k = []

    # 执行连接步骤
    for i in range(len(Lk_1)-1):     # 遍历Lk_1中的项集
        # print(C)
        for j in range(i+1, len(Lk_1)):
            if len(Lk_1[i][0]) <= 1:    # 频繁项集只有1项,则直接连接,产生候选项
                C = Lk_1[i][0][:]  # 复制Lk_1[i][0]给C
                C.append(Lk_1[j][0][-1])
            elif len(Lk_1[i][0]) > 1:
                if if_equal(Lk_1[i][0][:-1], Lk_1[j][0][:-1]) and Lk_1[i][0][-1] != Lk_1[j][0][-1]: # 连接条件
                    C = Lk_1[i][0][:]
                  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值