Python-NLTK最大熵分类器E

2024-07-01 06:52:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用NLTK的naivebayes分类器,但是我还想尝试Max-Ent分类器。从文档中看来,它应该采用与naivebayes相同的功能集格式,但是由于某些原因,我在尝试时遇到了这个错误:

  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

我不知道这意味着什么,但我使用的输入与运行naivebayes时的输入完全相同,这是可行的(训练数据,以成对列表表示,第一个成员是featureset,第二个是分类标签)。有什么想法吗?在

谢谢!在


Tags: inpyselfpackagesusrlinesitescipy
3条回答

您必须安装nltk,然后才能进行分类。 使用下面的代码在python中使用最大熵进行分类

me_classifier = nltk.MaxentClassifier.train(trainset,algorithm="gis")
print(me_classifier.classify(testing))

我在NLTK中也遇到了这个问题。虽然我无法令人满意地解决它(即使用scipy让Maxent工作),但当我使用不同的算法时,我能够用NLTK训练Maxent分类器。试着用

me_classifier = nltk.MaxentClassifier.train(trainset,algorithm="iis")

或其他可接受的算法值之一,如“gis”或“megam”。在

此问题还取决于您使用的scipy版本。在

NLTK利用scipy.max熵它在scipy0.10中被弃用,并在0.11中被删除,请参阅它的文档:http://docs.scipy.org/doc/scipy-0.10.0/reference/maxentropy.html#

我确实在github上为此创建了一个问题:https://github.com/nltk/nltk/issues/307

相关问题 更多 >

    热门问题