关联规则中的置信度计算

Posted

技术标签:

【中文标题】关联规则中的置信度计算【英文标题】:Confidence calculation in association rule 【发布时间】:2012-11-19 00:08:44 【问题描述】:
supportData = ('ELF'): 0.75, ('CAT'): 0.75, ('BAT', 'CAT', 'ELF'): 0.5, ('ARK', 'BAT'): 0.25, ('ARK', 'ELF'): 0.25, ('CAT', 'ELF'): 0.5, ('DOG'): 0.25, ('BAT', 'CAT'): 0.5, ('BAT', 'ELF'): 0.75, ('ARK'): 0.5, ('ARK', 'CAT'): 0.5, ('BAT'): 0.75

L = [('ARK'), ('CAT'), ('CAT'), ('ELF'),('ARK', 'CAT'), ('BAT', 'ELF'), ('BAT', 'CAT'), ('CAT', 'ELF'),('BAT', 'CAT', 'ELF')]


for freqSet in L:
    H =  list(freqSet)

    if len(H) == 1:
        pass
    else:
        for conseq in H:
            freqsetlist = list(freqSet)
            freqsetlist.remove(conseq)
            if len(freqsetlist) == 1:
               conf = supportData[freqSet]/supportData[tuple(freqsetlist)[0]]
               if conf >= 0.1:
                  print freqsetlist,'-->',conseq,'conf:',conf
            else:
               conf = supportData[freqSet]/supportData[tuple(freqsetlist)[:]]
               if conf >= 0.1:
                  print freqsetlist,'-->',conseq,'conf:',conf


KeyError: ('R','K')

有人能指出我为什么会收到这个错误吗?当 len(freqsetlist) > 1 时似乎会发生错误。那是在计算具有 3 个元素的元组时

【问题讨论】:

3 weeks later,不,我们仍然不能。 【参考方案1】:

当一个元组只有一个元素时,你应该在它后面加上一个逗号,这样它就会被解释为一个元组,而不是一个单独的(带括号的)元素:

'CAT' == ('CAT') != ('CAT',) == tuple(['CAT'])

由于您的 supportDataL 变量当前都在混合字符串和元组(我猜您只想拥有元组),因此这行代码将永远不会运行:

if len(H) == 1:
    pass

更新:至于你的错误信息,取第一个元素('ARK'):你首先将它转换为一个列表(['A', 'R', 'K']),然后删除第一个元素('A') ,然后将结果转换回元组 - 产生('R', 'K')。当您尝试在 supportData 字典中查找它时(在您提到的同一行代码中)它不存在,因此是 KeyError

按照我的解释更正您的数据,这样可以避免这个特殊错误:

supportData = ('ELF',): 0.75, ('CAT',): 0.75, ('BAT', 'CAT', 'ELF'): 0.5, ('ARK', 'BAT'): 0.25, ('ARK', 'ELF'): 0.25, ('CAT', 'ELF'): 0.5, ('DOG',): 0.25, ('BAT', 'CAT'): 0.5, ('BAT', 'ELF'): 0.75, ('ARK',): 0.5, ('ARK', 'CAT'): 0.5, ('BAT',): 0.75

L = [('ARK',), ('CAT',), ('CAT',), ('ELF',),('ARK', 'CAT'), ('BAT', 'ELF'), ('BAT', 'CAT'), ('CAT', 'ELF'),('BAT', 'CAT', 'ELF')]

【讨论】:

错误在这一行 conf = supportData[freqSet]/supportData[tuple(freqsetlist)[:]]。其他一切正常 这是我在答案中解释的问题的结果。有关更多详细信息,请查看上面的更新。另请参阅this,以防我不清楚。

以上是关于关联规则中的置信度计算的主要内容,如果未能解决你的问题,请参考以下文章

关联分析--概述(项集、关联规则、支持度、置信度、提升度)

关联规则支持度(support)置信度(confidence)并运用Spark RDD计算

关联规则支持度(support)置信度(confidence)并运用Spark RDD计算

关于数据挖掘中的apriori算法,帮忙推出关联规则 事务数为 5 支持度为0.6,置信度为0.6

关联规则之Apriori算法

第九章 数据关联规则分析算法——基于Apriori算法的关联项分析