关联规则中的置信度计算

时间:2012-11-19 00:08:45

标签: associations tuples

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)是>时,似乎发生错误。那是用3元素计算元组时的

1 个答案:

答案 0 :(得分:0)

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

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

由于你的supportDataL变量当前正在混合使用字符串和元组(当你猜想,只想拥有元组时),例如这行代码永远不会运行:

if len(H) == 1:
    pass

更新:,对于您的错误消息,请取第一个元素('ARK'):您首先将其转换为列表(['A', 'R', 'K']),然后删除第一个元素( 'A'),然后将结果转换回元组 - 产生('R', 'K')。当您尝试在supportData dict(在您提到的同一行代码中)查找时,它不在那里,因此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')]