我目前正在使用NLTK的朴素贝叶斯分类器,但我也想尝试使用Max Ent分类器。从文档中可以看出它应该采用与Naive Bayes相同的功能集格式,但出于某种原因,我在尝试时遇到此错误:
File "/usr/lib/python2.7/site-packages/nltk/classify/maxent.py", line 323, in train
gaussian_prior_sigma, **cutoffs)
File "/usr/lib/python2.7/site-packages/nltk/classify/maxent.py", line 1453, in train_maxent_classifier_with_scipy
model.fit(algorithm=algorithm)
File "/usr/lib64/python2.7/site-packages/scipy/maxentropy/maxentropy.py", line 1026, in fit
return model.fit(self, self.K, algorithm)
File "/usr/lib64/python2.7/site-packages/scipy/maxentropy/maxentropy.py", line 226, in fit
callback=callback)
File "/usr/lib64/python2.7/site-packages/scipy/optimize/optimize.py", line 636, in fmin_cg
gfk = myfprime(x0)
File "/usr/lib64/python2.7/site-packages/scipy/optimize/optimize.py", line 176, in function_wrapper
return function(x, *args)
File "/usr/lib64/python2.7/site-packages/scipy/maxentropy/maxentropy.py", line 420, in grad
G = self.expectations() - self.K
ValueError: shape mismatch: objects cannot be broadcast to a single shape
我不确定这意味着什么,但是当我运行朴素贝叶斯时,我正在使用与我相同的输入。(训练数据,表示为对的列表,其中第一个成员是featureset,其中第二个是分类标签。)任何想法?
谢谢!
答案 0 :(得分:3)
我也遇到过NLTK这个问题。虽然我无法令人满意地解决它(即让Maxent使用scipy工作),但当我使用不同的算法时,我能够在NLTK中训练最大分类器。尝试使用
进行培训me_classifier = nltk.MaxentClassifier.train(trainset,algorithm="iis")
或算法的其他可接受值之一,如“gis”或“megam”。
答案 1 :(得分:1)
此问题还取决于您使用的scipy版本。
NLTK使用scipy.maxentropy,它在scipy 0.10中已弃用,在0.11中删除,请参阅文档:http://docs.scipy.org/doc/scipy-0.10.0/reference/maxentropy.html#
我确实在github上创建了一个问题:https://github.com/nltk/nltk/issues/307
答案 2 :(得分:0)
你必须安装nltk然后你可以分类。 使用下面的代码在python中使用最大熵进行分类
me_classifier = nltk.MaxentClassifier.train(trainset,algorithm="gis")
print(me_classifier.classify(testing))