用scikit-learn绘制接收器操作特性的问题?

时间:2015-03-10 01:57:09

标签: python python-2.7 matplotlib machine-learning scikit-learn

我想绘制接收器工作特性曲线,因此我执行以下操作:

from sklearn.metrics import roc_curve, auc
predictions = auto_wclf.predict_proba(X_test)
false_positive_rate, recall, thresholds = roc_curve(y_test, predictions[:, 1])
roc_auc = auc(false_positive_rate, recall)
plt.title('Receiver Operating Characteristic')
plt.plot(false_positive_rate, recall, 'b', label='AUC = %0.2f' % roc_auc)
plt.legend(loc='lower right')
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.ylabel('Recall')
plt.xlabel('Fall-out')
plt.show()

但我得到了这个例外:

Traceback (most recent call last):
  File "plot.py", line 172, in <module>
    false_positive_rate, recall, thresholds = roc_curve(y_test, predictions[:, 1])
  File "plot.py", line 890, in roc_curve
    y_true, y_score, pos_label=pos_label, sample_weight=sample_weight)
  File "/usr/local/lib/python2.7/site-packages/sklearn/metrics/metrics.py", line 710, in _binary_clf_curve
    raise ValueError("Data is not binary and pos_label is not specified")
ValueError: Data is not binary and pos_label is not specified

我有多标签分类问题(5个类别)。知道如何策划这个吗?先谢谢你们。

1 个答案:

答案 0 :(得分:3)

是的,ROC曲线&#34;是一个图形图,用于说明二元分类器系统的性能,因为它的识别阈值是变化的(#{3}})。

此外,&#34;对于具有两个以上类别的分类问题的ROC曲线的扩展总是很麻烦,因为自由度随着类的数量呈二次方增加,并且ROC空间具有c(c-1) )维度,其中c是类的数量。&#34;(wiki)由于你有5个类甚至多标签,ROC曲线并不适合你。

使用same wiki pageHamming lossF1-scoreaccuracyprecision等指标代替 - 为您的任务选择最合适的指标。