我正在尝试编写NaiveBayes分类器,但一直收到以下错误:
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
import naive_assignment
File "C:\Python27\naive_assignment.py", line 655, in <module>
main()
File "C:\Python27\naive_assignment.py", line 650, in main
pans.append(p.classify(row))
File "C:\Python27\naive_assignment.py", line 597, in classify
less50Kcp = less50Kcp + self.less_cat_probs.get(query[4])
TypeError: unsupported operand type(s) for +: 'float' and 'NoneType'
我很确定如何修复它,因为大多数修复程序都会返回一些内容,但已经在代码中了。在
^{pr2}$我知道这不是最好的编码方式。 调用此函数的主要函数是:
def main():
data = getInputData('./trainingset.txt')
test = getInputData('./queries.txt')
p = nbayes(data)
p.train()
pans = []
for row in test:
pans.append(p.classify(row))
print("n-bayes")
print(pans)
main()
有人知道怎么解决这个问题吗?在
self.less_cat_probs.get(query[4])
显然计算结果是None
-您需要检查并避免它,或者修复生成它的代码。在错误消息很好地解释了这一点—它抛出了一个不受支持的类型错误,并告诉您不能在给定的行中向
NoneType
添加float
。我们可以看到less50Kcp
是一个浮点数,另一个项目必须是None
,因此出现错误,因为None
不是数字。在一个可能的修复假设} 提供一个默认值
self.less_cat_probs
是一个dict,它将为^{0
,这样当找不到密钥时,加法仍然有效。E、 g组:less50Kcp = less50Kcp + self.less_cat_probs.get(query[4], 0)
然而,有一个问题是,这是否是所需的功能-您可能希望确保您在dict中有需要的条目,并且您可能希望在结果中重复此修复。在
请注意,您给我们的代码是一个非常糟糕的复制/粘贴编码示例-这会导致更多的错误、更难的维护、更多的bug和更多的输入。我强烈建议您正确地执行此操作,减少使用循环和数据结构的重复代码,这样可以更容易地发现错误。在
相关问题 更多 >
编程相关推荐