python nltk 朴素贝叶斯概率

Posted

技术标签:

【中文标题】python nltk 朴素贝叶斯概率【英文标题】:python nltk naive bayes probabilities 【发布时间】:2014-01-13 10:08:48 【问题描述】:

有没有办法使用 nltk.NaiveBayesClassifier.classify 获得个体概率?我想查看分类的概率以尝试制作置信度表。显然,对于二元分类器,决策将是一个或另一个,但有没有办法看到决策是如何做出的内部运作?或者,我只需要编写自己的分类器?

谢谢

【问题讨论】:

你试过什么?您是否尝试过使用 most_informative_features? show_most_informative_features?等等? 是的,当然,我正在寻找一种方法来获得训练后的个人分类概率。当我传入一个新文档并返回一个决定时。我训练的分类器工作正常,我想知道是否有一种方法可以观察使用已经训练的分类器对文档进行分类的决策概率 【参考方案1】:

nltk.NaiveBayesClassifier.prob_classify 怎么样?

http://nltk.org/api/nltk.classify.html#nltk.classify.naivebayes.NaiveBayesClassifier.prob_classify

classify 调用这个函数:

def classify(self, featureset):
    return self.prob_classify(featureset).max()

编辑:这样的东西应该可以工作(未经测试):

dist = classifier.prob_classify(features)
for label in dist.samples():
    print("%s: %f" % (label, dist.prob(label)))

【讨论】:

prob_classify 用于训练未知特征。我已经有一个训练有素的分类器。当我向分类器传递一个新文档时,它会对其进行分类。但是朴素贝叶斯分类器根据概率做出决策,我想知道您是否可以轻松访问这些决策概率? 查看我的编辑 -- classify 只是根据prob_classify 返回最可能的标签。您在哪里发现“prob_classify 用于训练未知特征”?顺便提一句。我们的讨论似乎与groups.google.com/forum/#!topic/nltk-users/rZhvtVMhMXA 相同 来自您发布的链接中的描述。它解释说,如果您有一个已标记的文档,则它用于对未标记的文档进行分类。就像如果您有为您的测试集标记的正面情绪文档但没有负面文档,它将被分类为 pos 和 other 在这种情况下将是负面的 不,我发布的文档是指 NaiveBayesClassifier。您正在谈论的内容在下面并谈论positivenaivebayes模块。【参考方案2】:

我知道这已经过时了。但是当我费了一些时间才发现这一点时,我分享了这段代码。

它显示了朴素贝叶斯分类器中每个特征的概率关联。它帮助我更好地理解show_most_informative_features 是如何工作的。可能它是每个人的最佳选择(很可能这就是他们创建此功能的原因)。无论如何,对于像我这样必须看到每个标签和单词的个人的人,您可以使用以下代码:

for label in classifier.labels():
  print(f'\n\nlabel:')
  for (fname, fval) in classifier.most_informative_features(50):
    print(f"   fname(fval): ", end="")
    print("0:.2f%".format(100*classifier._feature_probdist[label, fname].prob(fval)))

【讨论】:

以上是关于python nltk 朴素贝叶斯概率的主要内容,如果未能解决你的问题,请参考以下文章

Python nltk朴素贝叶斯似乎不起作用

如何使用 Python Pandas 从 NLTK 运行朴素贝叶斯?

NLTK 朴素贝叶斯分类错误

使用 NLTK 的半监督朴素贝叶斯 [关闭]

NLTK,朴素贝叶斯:为啥有些特征没有?

朴素贝叶斯:朴素贝叶斯定义朴素贝叶斯公式分解朴素贝叶斯分类流程高斯型朴素贝叶斯多项式朴素贝叶斯伯努利型朴素贝叶斯朴素贝叶斯预测概率校准朴素贝叶斯优缺点