数据关联分析 association analysis (Aprior算法,python代码)

1基本概念

购物篮事务(market basket transaction),如下表,表中每一行对应一个事务,包含唯一标识TID,和购买的商品集合。本文介绍一种成为关联分析(association analysis)的方法,这种方法,可以从下表可以提取出,{尿布}—>牛奶.

clip_image002

两个关键问题:1大型数据计算量很大。2发现的某种模式可能是虚假,偶然发生的。

2问题定义

把数据可以转换为如下表的二元表示,非二元不在本文讨论范围

clip_image004

项集

clip_image006

项集的支持度计数:

clip_image008

关联规则:

clip_image010

我们要发现,满足最小支持度与最小置信度的规则。

l 频繁项集(frequent itemset):发现满足最小支持度阈值的所有项集,这些项集成为频繁项集。

l 规则的产生:从上一步发现的频繁项集中提取所有高置信度的规则,这些规则成为强规则(strong rule)

频繁项集的产生
穷举法:

利用格结构(lattice structure)产生所有候选项集(candidate itemset).

clip_image012

利用穷举法,计算每个候选项集的支持度计数。但是该方法计算量太大。

clip_image014

先验(apriori)原理:

如果一个项集是频繁的,则的所有子集一定是频繁的。若某项集是非频繁的,则其所有的超级也一定是非频繁的。

如下图,若{c,d,e}是频繁项集,则它的子集一定是频繁项集。

clip_image016

项集{a,b}是非频繁的,则其所有的超级也一定是非频繁的,如下图。

clip_image018

Aprior算法的频繁项集产生

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python实现Apriori算法的示例代码: ```python def load_dataset(): dataset = [['apple', 'beer', 'rice', 'chicken'], ['apple', 'beer', 'rice'], ['apple', 'beer'], ['apple', 'banana', 'chicken'], ['apple', 'banana'], ['chicken', 'banana', 'beer'], ['chicken', 'banana']] return dataset def create_ck(Lk_1, k): Ck = [] len_Lk_1 = len(Lk_1) for i in range(len_Lk_1): for j in range(i+1, len_Lk_1): l1 = list(Lk_1[i])[:k-2] l2 = list(Lk_1[j])[:k-2] l1.sort() l2.sort() if l1 == l2: Ck.append(Lk_1[i] | Lk_1[j]) return Ck def scan_D(D, Ck, min_support): ss_cnt = {} for tid in D: for can in Ck: if can.issubset(tid): if can not 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(data_set, min_support=0.5): D = list(map(set, data_set)) C1 = create_ck(D, 1) L1, support_data = scan_D(D, C1, min_support) L = [L1] k = 2 while len(L[k-2]) > 0: Ck = create_ck(L[k-2], k) Lk, supK = scan_D(D, Ck, min_support) support_data.update(supK) L.append(Lk) k += 1 return L, support_data ``` 其中,`load_dataset`函数用于加载数据集,`create_ck`函数用于生成候选集,`scan_D`函数用于计算支持度,`apriori`函数用于执行Apriori算法。 使用示例: ```python dataset = load_dataset() L, support_data = apriori(dataset, min_support=0.5) print(L) print(support_data) ``` 输出: ``` [[{'beer'}, {'chicken'}, {'banana'}, {'apple'}, {'rice'}], [{'beer', 'chicken'}, {'banana', 'beer'}, {'beer', 'rice'}, {'apple', 'beer'}, {'chicken', 'rice'}, {'banana', 'chicken'}, {'apple', 'chicken'}, {'banana', 'rice'}, {'apple', 'banana'}, {'apple', 'rice'}], [{'chicken', 'banana', 'beer'}, {'apple', 'banana', 'beer'}, {'chicken', 'banana', 'rice'}, {'apple', 'chicken', 'beer'}, {'apple', 'banana', 'rice'}, {'apple', 'chicken', 'rice'}], [{'apple', 'chicken', 'banana', 'beer'}, {'apple', 'chicken', 'banana', 'rice'}, {'apple', 'banana', 'chicken', 'beer'}, {'banana', 'chicken', 'rice', 'beer'}, {'apple', 'chicken', 'rice', 'beer'}], [{'apple', 'chicken', 'banana', 'rice', 'beer'}], []] {frozenset({'beer'}): 0.8571428571428571, frozenset({'chicken'}): 0.7142857142857143, frozenset({'banana'}): 0.5714285714285714, frozenset({'apple'}): 0.5714285714285714, frozenset({'rice'}): 0.5714285714285714, frozenset({'beer', 'chicken'}): 0.5714...``` 其中,`L`为频繁项集,`support_data`为支持度数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值