我正在尝试 pickle 贝叶斯类对象。我的代码是:
file = open('Bayes.pkl', 'wb')
pickle.dump(bayes, file)
file.close()
我收到以下错误
TypeError: can't pickle instancemethod object
为了克服这个问题,我引用了这个 StackOverflow 解决方案: How to remove instancemethod objects, for the sake of pickle, without modifying the original class
这表明使用方法getstate()和setstate()。这很有效,我能够 pickle 我的文件。 但是,当我尝试测试我的数据时,出现如下错误:
File "/home/anaconda2/lib/python2.7/site-packages/reverend/thomas.py", line 254, in guess
res[pname]=self.combiner(p, pname)
TypeError: 'NoneType' object is not callable
我的代码如下:
my_str = ' '
for val in sourceCode:
my_str += str(val)
results = classifier.guess(my_str)
print results
my_str 的类型是字符串。然而,它仍然不是猜测。
最佳答案
您的类通过 bayes.save('bayes.pkl')
和 bayes.load('bayes.pkl')
有自己的 pickling/unpickling 支持。它执行以下操作:
def save(self, fname='bayesdata.dat'):
from cPickle import dump
fp = open(fname, 'wb')
dump(self.pools, fp)
fp.close()
def load(self, fname='bayesdata.dat'):
from cPickle import load
fp = open(fname, 'rb')
self.pools = load(fp)
fp.close()
self.corpus = self.pools['__Corpus__']
self.dirty = True
关于python - 无法从牧师模块中 pickle 贝叶斯对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43928111/