【问题标题】:Confidence calculation in association rule [closed]关联规则中的置信度计算
【发布时间】:2012-10-19 16:31:31
【问题描述】:
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

Output

KeyError: ('R','K')

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

【问题讨论】:

  • 你不能。但这只是代码中的表示,那么您为什么要尝试实现呢?
  • 您的用例是什么?做str(k)[:-2] + ')' 之类的事情只是愚蠢的......那么,你想要什么?
  • 顺便说一下('van')是一个字符串('van',)是一个元组。

标签: python list associations tuples


【解决方案1】:

那是对象的表示,如果你想要不同的表示,你将不得不自己构造它:

>>> k = ['van']
>>> "({})".format(", ".join(k))
'(van)'

请注意,这意味着您正在使用 Python 的对象表示作为程序的一部分,这是一个坏主意,您应该始终手动构建您需要的内容,而不是尝试使用 Python 的表示,后者旨在用于调试.

编辑:逗号是 Python 表示它是一个元组的方式,因为括号表示操作的分组而不是默认的元组。如果你真的想要,你可以创建自己的元组子类并更改 __repr__()/__str__(),但这将毫无意义(在 __repr__() 的情况下是不符合 Python 的,因为它应该评估对象)。

【讨论】:

  • 但这会将其转换为字符串...
  • @avasal 如果您不希望它是一个字符串,那么为什么逗号很重要?
  • ('van',) 也是对象的字符串表示形式。
【解决方案2】:
  supportData = {('nas','fat'): 0.5, ('nas'): 1.0, ('fat'):0.6, ('van'):0.72, ('jos'):0.55,('van','jos'):0.10}

  itemSets = [('nas','fat'),('van','jos')]

  for freqSet in itemSets: H = [''.join(list(item)) for item in freqSet]

  for conseq in H:

    freqsetlist = list(freqSet)
    freqsetlist.remove(conseq)
    conf = supportData[freqSet]/supportData[tuple(freqsetlist)[0]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多