我想绘制接收器工作特性曲线,所以我执行以下操作:
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 个类别)。知道如何绘制这个吗?提前感谢伙计们。
是的,ROC 曲线"是一个图形图,说明了二元分类器系统在其区分阈值变化时的性能"(wiki)。
此外,"对于两个以上类的分类问题,ROC曲线的扩展一直很麻烦,因为自由度随类的数量呈二次增加,而ROC空间具有c(c-1)维,其中c是类的数量。(同一维基页面)由于您有 5 个类甚至多标签,因此 ROC 曲线不适合您。
改用汉明损失、F1 分数、准确性、精度、召回率等指标 - 选择最适合您任务的指标。