繁体   English   中英

Python决策树分类器batch_prob_classify函数

[英]Python Decision Tree Classifier batch_prob_classify function

我正在尝试运行下面的nltk网站http://www.nltk.org/howto/classify.html中提供的决策树代码

>>> train = [
...      (dict(a=1,b=1,c=1), 'y'),
...      (dict(a=1,b=1,c=1), 'x'),
...      (dict(a=1,b=1,c=0), 'y'),
...      (dict(a=0,b=1,c=1), 'x'),
...      (dict(a=0,b=1,c=1), 'y'),
...      (dict(a=0,b=0,c=1), 'y'),
...      (dict(a=0,b=1,c=0), 'x'),
...      (dict(a=0,b=0,c=0), 'x'),
...      (dict(a=0,b=1,c=1), 'y'),
...      ]
>>>
>>>
>>> test = [
...      (dict(a=1,b=0,c=1)), # unseen
...      (dict(a=1,b=0,c=0)), # unseen
...      (dict(a=0,b=1,c=1)), # seen 3 times, labels=y,y,x
...      (dict(a=0,b=1,c=0)), # seen 1 time, label=x
...      ]
>>>
>>>
>>> import nltk
>>> classifier = nltk.classify.DecisionTreeClassifier.train(train, entropy_cutoff=0, support_cutoff=0)
>>> sorted(classifier.labels())
['x', 'y']
>>> print(classifier)
c=0? .................................................. x
  a=0? ................................................ x
  a=1? ................................................ y
c=1? .................................................. y

>>> classifier.batch_classify(test)
['y', 'y', 'y', 'x']
>>> for pdist in classifier.batch_prob_classify(test):
...      print('%.4f %.4f' % (pdist.prob('x'), pdist.prob('y')))
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "//anaconda/lib/python2.7/site-packages/nltk/classify/api.py", line 87, in batch_prob_classify
    return [self.prob_classify(fs) for fs in featuresets]
  File "//anaconda/lib/python2.7/site-packages/nltk/classify/api.py", line 67, in prob_classify
    raise NotImplementedError()
NotImplementedError
>>>

问题出在batch_prob_classify函数上。 任何人都可以建议如何解决问题以及如何获得概率分布值。

DecisionTreeClassifier使用概率类MLEProbDist ,它没有任何prob方法。 NaiveBayesClassifier ,在另一方面,使用概率类ELEProbDist ,这反过来从继承LidstoneProbDist概率类和确实提供了一种prob方法。

因此,除非您要创建DecisionTreeClassifier的子类并自己添加prob方法, NaiveBayesClassifier可能要使用NaiveBayesClassifier来代替:

>>> classifier = nltk.classify.NaiveBayesClassifier.train(train)  # note the use of NaiveBayesClassifier here
>>> for pdist in classifier.batch_prob_classify(test):
      print('%.4f %.4f' % (pdist.prob('x'), pdist.prob('y')))


0.3104 0.6896
0.5746 0.4254
0.3685 0.6315
0.6365 0.3635

正如@Mike指出的那样,您收到了预期的结果。 您可能对页面前面的一个非常相似的示例感到困惑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM