Python NLTK 最大熵分类器错误
Posted
技术标签:
【中文标题】Python NLTK 最大熵分类器错误【英文标题】:Python NLTK Maximum Entropy Classifier Error 【发布时间】:2012-04-18 17:24:46 【问题描述】:我目前正在使用 NLTK 的朴素贝叶斯分类器,但我也想试用 Max Ent 分类器。从文档看来,它应该采用与朴素贝叶斯相同的功能集格式,但由于某种原因,我在尝试时遇到了这个错误:
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
我不确定这意味着什么,但我使用的输入与我运行朴素贝叶斯时使用的输入完全相同。(训练数据,表示为对列表,其中第一个成员是特征集,第二个是分类标签。)有什么想法吗?
谢谢!
【问题讨论】:
如果你能显示导致错误的代码会很有帮助 【参考方案1】:你必须安装 nltk 然后你才能分类。 使用下面的代码在python中使用最大熵进行分类
me_classifier = nltk.MaxentClassifier.train(trainset,algorithm="gis")
print(me_classifier.classify(testing))
【讨论】:
【参考方案2】:此问题还取决于您使用的 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
【讨论】:
【参考方案3】:我在使用 NLTK 时也遇到了这个问题。虽然我无法令人满意地解决它(即使用 scipy 让 Maxent 工作),但当我使用不同的算法时,我能够在 NLTK 中训练一个 maxent 分类器。尝试使用
进行训练me_classifier = nltk.MaxentClassifier.train(trainset,algorithm="iis")
或其他可接受的算法值之一,例如“gis”或“megam”。
【讨论】:
以上是关于Python NLTK 最大熵分类器错误的主要内容,如果未能解决你的问题,请参考以下文章
logistic regression与最大熵模型·最大熵模型