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 最大熵分类器错误的主要内容,如果未能解决你的问题,请参考以下文章

大数据集的最大熵分类器

如何在斯坦福分类器中使用朴素贝叶斯分类器、SVM 和最大熵

最大熵分类中的“共识”

logistic regression与最大熵模型·最大熵模型

logistic regression与最大熵模型·最大熵模型

最大熵模型原理小结