1

我遇到了 Python 密钥错误,无法解决。

给出的错误如下所示

Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
import handling_data_
File "C:\Python27\handling_data_.py", line 453, in <module>
main()
File "C:\Python27\handling_data_.py", line 443, in main
pans.append([row[0],p.classify(row)])
File "C:\Python27\handling_data_.py", line 367, in classify
cgclass = self.greater_class_prob_dist[query[2]]
KeyError: ' Without-pay'

有问题的行是

clclass = self.less_class_prob_dist[query[2]]

我不确定这条线有什么问题,因为 Greater_class_prob_dist 还有另一条线

cgclass = self.greater_class_prob_dist[query[2]]

该类是一个朴素的贝叶斯实现,如果从包含“Without-pay”的文本文件中获取条目,它可以完美地工作,否则它不会。

有谁知道如何解决这个问题?

这是整个类和文本文件的链接,如果人们需要查看或运行它以自己查看问题 源代码

任何帮助都非常有用

编辑:记录打印包含“无薪”

['tst1249', 62, ' Without-pay', 170114, ' Assoc-acdm', 12, ' Married-civ-spouse', ' Farming-fishing', ' Husband', ' White', ' Male', 0, 0, 50, ' United-States', '?']
4

1 回答 1

1

如果您查看 中的所有条目trainingset.txt,您会看到所有带有 的条目Without-pay都被列为有<=50k收入。正如您在 中看到的__init__,训练数据分为两组:

        for row in data:
              if row[15] == ' >50K':
                    self.greaterThan_data.append(row)
              else:
                    self.lessThan_data.append(row)

由于没有一个Without-pay条目有>50k收入,所以它们都没有进入greaterThan_data.

所以当你打电话...

        self.greater_class_prob_dist = self.getCatProbs(self.greaterThan_data,2)

..结果 dict 缺少那个键。

于 2012-04-21T16:50:29.043 回答