Ntlk与Python,绘制ROC曲线
我正在用Python和nltk库,想要画出我分类器(朴素贝叶斯)的ROC曲线。请问有没有现成的函数可以用来画这个曲线,还是说我需要自己计算真正率和假正率呢?
如果有人能给我指个方向,告诉我一些已经实现这个功能的代码就太好了...
谢谢!
1 个回答
3
这是使用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,你实际上希望得到一个更接近零的值。这就是我建议使用
.prob(1)
的原因。