无法从牧师模块中腌制贝叶斯物体

时间:2017-05-12 01:52:09

标签: python machine-learning pickle bayesian

我试图挑选一个贝叶斯类对象。我的代码是:

file = open('Bayes.pkl', 'wb')
pickle.dump(bayes, file)
file.close()

我收到以下错误

  

TypeError:无法pickle instancemethod对象

为了解决这个问题,我提到了这个StackOverflow解决方案:     How to remove instancemethod objects, for the sake of pickle, without modifying the original class

这表示使用方法 getstate ()和 setstate ()。这工作,我能够腌制我的文件。 但是,当我尝试测试我的数据时,我得到如下错误:

 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的类型是字符串。但是,它仍然没有猜测。

1 个答案:

答案 0 :(得分:1)

您的课程通过bayes.save('bayes.pkl')bayes.load('bayes.pkl')提供了自己的腌制/解锁支持。它执行以下操作:

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