如何根据真实类别和预测类别绘制多类别Roc曲线

问题描述

我想为有4个类的问题绘制ROC曲线。经过培训和预测,我创建了真实和预测的班级列表。这是我的清单。

true_class列表: [0、1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0 ,1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0、1 ,2,3,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1 ,2、0、1、2、3、0、1、2、0、1、2、0、1、2、0、1、2、0、1、2、0、1、2、0、1 ,2,0,1,2,0,1,2,0,1,2,0,1,2,3,0,1,0,1,0,1,0,1,0,1,0 ,1,0,1,0,1,0,1,0,1,0,1,2,3,0,1,0,1,0,1,0,1,0,1,0,1 ,0,1,0,1,0,1,0,1,0,1,2,3,0,1,0,1,0,1,0,1,0,1,0,1,0 ,1,0,1,0,1,0,1,0,1,2,3,0,1,0,1,0,1,0,1,0,1,0,1,0,1 ,0,1,0,1,0,1,0,1,2,3,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0 ,1、1、1、0、1、2、3、1、0、1、2、3、3、3、3、3、3、3、3、3、3、3、3、3、3 ,3、3、3、3、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3 ,2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2 ,3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3 ,2、3、2、3、2、3、2、3、2 3,2,3,2,3,2,3,2,2,2,2,2,0,0,0,3,3,3,3,3,2]

predicted_class列表: [0、1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0 ,1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0、1、2、3、0、1 ,2,3,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1 ,2、0、1、2、3、0、1、2、0、1、2、0、1、2、0、1、2、0、1、2、0、1、2、0、1 ,2,0,1,2,0,1,2,0,1,2,0,1,2,3,0,1,0,1,0,1,0,1,0,1,0 , 1,0,1,0,1,0,1,0,1,0,1,2,3,0,1,0,1,0,1,0,1,0,1,0,1, 0,1,0,1,0,1,0,1,0,1,2,3,0,1,0,1,0,1,0,1,0,1,0,1,0, 1,0,1,0,1,0,1,0,1,2,3,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,1,0,1,0,1,0,1,2,3,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0, 1,1,1,0,1,2,3,1,0,1,2,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3, 3、3、3、3、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3, 2、3、2、3、2、3、2、3、2、3、2、3、2、2、2、3、2、3、2、3、2、3、2、3、2 3、2、3、2、3、2、3、2、3、2、3、2、3, 2、3、2、3、2、3、2、3、3、3、2、3、2、3、2、3、2、3、2、3、2、3、2、3、2, 3,2,3,2,2,2,2,2,0,0,0,3,3,3,3,3,3,2]

解决方法

ROC曲线通常是用非阈值数据绘制的,有关二进制roc曲线,请参见sklearn实现。多类别roc曲线也有一些扩展(通常也与非阈值预测一起使用),但是比这更好的指标。

,

您可以使用它,因为它是二进制的,应该确定我设置的roc_curvepos_label=1的正值是什么,所以您应该自行确定

import sklearn.metrics as metrics
falsepr,truepr,threshold = metrics.roc_curve(true_class_list,predicted_class_list,pos_label=1)
roc_auc = metrics.auc(falsepr,truepr)
# method I: plt
import matplotlib.pyplot as plt
plt.title('Receiver Operating Characteristic')
plt.plot(falsepr,'b',label = 'AUC = %0.2f' % roc_auc)
plt.legend(loc = 'lower right')
plt.plot([0,1],[0,'r--')
plt.xlim([0,1])
plt.ylim([0,1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
,

也许使用与ROC曲线不同的度量标准,因为它们与用例不太吻合。