关联规则中的置信度计算
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'])
由于您的 supportData
和 L
变量当前都在混合字符串和元组(我猜您只想拥有元组),因此这行代码将永远不会运行:
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计算