Ntlk&;Python,绘制ROC曲线

Ntlk&;Python,绘制ROC曲线,python,nlp,machine-learning,nltk,Python,Nlp,Machine Learning,Nltk,我将nltk与Python结合使用,我想绘制我的分类器(朴素贝叶斯)的ROC曲线。是否有绘图功能,或者我应该跟踪真阳性率和假阳性率 如果有人能告诉我一些已经在做的代码,那就太好了 谢谢。PyROC看起来很简单: 这就是NLTK朴素贝叶斯分类器的工作原理: # class labels are 0 and 1 labeled_data = [ (1, featureset_1), (0, featureset_2), (1, featureset_3), # ...

我将nltk与Python结合使用,我想绘制我的分类器(朴素贝叶斯)的ROC曲线。是否有绘图功能,或者我应该跟踪真阳性率和假阳性率

如果有人能告诉我一些已经在做的代码,那就太好了


谢谢。

PyROC看起来很简单:

这就是NLTK朴素贝叶斯分类器的工作原理:

# class labels are 0 and 1
labeled_data = [
    (1, featureset_1),
    (0, featureset_2),
    (1, featureset_3),
    # ...
]

# naive_bayes is your already trained classifier,
# preferrably not on the data you're testing on :)

from pyroc import ROCData

roc_data = ROCData(
    (label, naive_bayes.prob_classify(featureset).prob(1))
    for label, featureset
    in labeled_data
)
roc_data.plot()
编辑:

  • ROC仅用于二进制分类器。如果您有三个类,那么您可以分别度量正类和负类的性能(通过将其他两个类计算为0,就像您建议的那样)
  • 库希望决策函数的输出作为每个元组的第二个值。然后它尝试所有可能的阈值,例如f(x)>=0.8=>分类为1,并为每个阈值绘制一个点(这就是为什么最后会得到一条曲线)。因此,如果您的分类器猜测类0,那么您实际上需要一个接近于零的值。这就是为什么我建议
    。问题(1)

感谢您的快速回复。然而,有几件事我不明白:1)我有三个类,分别命名为“P”、“N”和“?”(正、负和中性),如果我给正类分配数字1,给负中性类分配数字0,可以吗?2) 它不应该是“naivebayes.prob\u classification(featureset.prob(label))”吗?(也就是说,通过标签的概率而不是肯定类)@DT:我编辑了我的答案-如果不清楚或者我说错了,请告诉我!再次感谢!编辑中的第一个点是清晰的。关于第二个点,我理解了ROC曲线是如何绘制的(感谢清楚的解释),但我想再次检查一下:如果1=正,0=负,你使用
prob(1)
你绘制的ROC曲线显示了正分类的性能,对吗?基于python2,现在不太实用;改用