关联分析——基于h-confidence剪枝的Apriori算法

在倾斜支持度分布的数据集中,基于支持度剪枝的Apriori算法表现不佳。文章介绍了h-confidence剪枝的概念,用于解决支持度和置信度失效的问题。通过Python实现展示了如何生成候选项集和支持度计数,并通过测试对比了支持度剪枝与h-confidence剪枝的效果,证明h-confidence剪枝能有效提取强关联规则并剔除交叉支持模式。
摘要由CSDN通过智能技术生成

摘要

当数据集存在倾斜支持度分布时,基于支持度剪枝的Apriori算法无法很好的提取频繁项集,这时需要根据h-confidence进行剪枝。

倾斜支持度分布

一个倾斜支持度分布的例子:
在这里插入图片描述
基于支持度剪枝会产出如下问题:
设定过高的支持度阈值会忽略掉一些有趣的规则;
设定过高的支持度阈值会导致:过高的计算成本;会提取出交叉支持模式。
交叉支持模式的定义如下:
在这里插入图片描述

为何支持度和置信度失效

考虑如下数据集:
在这里插入图片描述
在这样的数据集支持度是无效的:
在这里插入图片描述
置信度也是无效的:
在这里插入图片描述

如何解决

在这里插入图片描述
在这里插入图片描述

Python实现

给出数据集:

data = [['a', 'c', 'd'], ['b', 'c', 'e'], ['a', 'b', 'c', 'e'], ['b', 'e']]

生成候选1-项集并计算候选1-项集的支持度计数

# 生成候选1-项集
def createC1(data):
    c1 = []
    for task in data:
        for item in task:
            if [item] not in c1:
                c1.append([item])
    # 排序是因为之后生产频繁k-项集是采用F(k-1)*F(k-1)方法
    c1.sort()
    # frozenset()返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
    return list(map(frozenset, c1))

C1 = createC1(data)
# 计算1-项集的支持度计数
count_c1 = {
   }
for task in data:
    for item in C1:
        if item.issubset(task):
            count_c1[item] = count_c1.get(item, 0) + 1
# 排序是为了减少查询次数
count_c1 = dict(sorted(count_c1.items(), key=lambda kv:(kv[1], kv[0]), reverse=True))
print(count_c1)
{
   frozenset({
   'c'}): 3,
 frozenset({
   'b'}): 3,
 frozenset({
   'e'}): 3,
 frozenset({
   'a'}): 2,
 frozenset({
   'd'}): 1}

基于全置信度剪枝生成候选2-项集

# 全置信度剪枝适用于倾斜支持度分布的数据集
# 在生成候选2-项集时无需提取频繁1-项集直接根据候选1-项集提取即可
def scanData(data, C_k, h_c, count_c1):
    # 计算候选项集的支持度计数
    ssCnt = {
   }
    for task in data:
        for can in C_k:
            if can.issubset(task):
                ssCnt[can] = ssCnt.get(can, 0) + 1
    # 计算候选项集的全置信度
    retlist = []
    Fk = {
   }
    for key in ssCnt.keys():
        for item in count_c1.keys(
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值