Python算法总结(十一)Apriori算法(附手写python实现代码)

一、算法类型

无监督算法

(小广告)重要事情说三遍~

想听我讲代码,请点这里,进入B站
想听我讲代码,请点这里,进入B站
想听我讲代码,请点这里,进入B站

二、算法原理

(1)算法流程
在这里插入图片描述
(2)指标
在这里插入图片描述

三、手写Python算法

(1)产生频繁项集

def create_c1(dataset):
    """
    #辅助函数1
    函数功能:⽣成第⼀个候选项集c1,每个项集只有1个item
    参数说明:
     dataset:原始数据集
    返回:
     frozenset形式的候选集合c1
    """
    c1=[]
    for transaction in dataset:
        for item in transaction:
            if not {
   item} in c1:
                c1.append({
   item})
    c1.sort()
    return list(map(frozenset,c1))
def create_freq_transaction(dataset,ck,min_support=0.5):
    """
    #辅助函数2
    函数功能:⽣成满⾜最⼩⽀持度的频繁项集
    参数说明:
     dataset:原始数据集
     ck:候选项集
     min_support:最⼩⽀持度
    返回:
    support_data:候选项集ck的⽀持度字典(key:候选项, value:⽀持度)
    freq_transaction:给定min_support下的ck中的频繁项集
    
    注意:如果ck中得不到频繁项集,则返回的是空list
    """
    sscnt={
   } #存放项集及频次
    for transaction in dataset:
        for can in ck: #候选项集
            if can.issubset(transaction):
                sscnt[can]=sscnt.get(can,0)+1 #频次&
  • 14
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
我可以回答这个问题。Apriori算法是一种频繁项集挖掘算法,可以用于数据挖掘中的关联规则挖掘。以下是一个简单的Python实现: ```python def load_data(): return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]] def create_C1(data_set): C1 = [] for transaction in data_set: for item in transaction: if not [item] in C1: C1.append([item]) C1.sort() return list(map(frozenset, C1)) def scan_D(D, Ck, min_support): ss_cnt = {} for tid in D: for can in Ck: if can.issubset(tid): if not can in ss_cnt: ss_cnt[can] = 1 else: ss_cnt[can] += 1 num_items = float(len(D)) ret_list = [] support_data = {} for key in ss_cnt: support = ss_cnt[key] / num_items if support >= min_support: ret_list.insert(0, key) support_data[key] = support return ret_list, support_data def apriori_gen(Lk, k): ret_list = [] len_Lk = len(Lk) for i in range(len_Lk): for j in range(i+1, len_Lk): L1 = list(Lk[i])[:k-2] L2 = list(Lk[j])[:k-2] L1.sort() L2.sort() if L1 == L2: ret_list.append(Lk[i] | Lk[j]) return ret_list def apriori(data_set, min_support=0.5): C1 = create_C1(data_set) D = list(map(set, data_set)) L1, support_data = scan_D(D, C1, min_support) L = [L1] k = 2 while len(L[k-2]) > 0: Ck = apriori_gen(L[k-2], k) Lk, sup_k = scan_D(D, Ck, min_support) support_data.update(sup_k) L.append(Lk) k += 1 return L, support_data data_set = load_data() L, support_data = apriori(data_set, min_support=0.5) print(L) print(support_data) ``` 这个代码实现Apriori算法,并输出了频繁项集和它们的支持度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值