如何从真实类和预测类绘制多类 Roc 曲线
Posted
技术标签:
【中文标题】如何从真实类和预测类绘制多类 Roc 曲线【英文标题】:How To Plot Multi Class Roc Curve From True and Predicted Classes 【发布时间】:2021-01-06 16:10:18 【问题描述】:我想为我的问题绘制 ROC 曲线,它有 4 个类。我在训练和预测之后创建了 True 和 Predicted 类列表。这是我的清单。
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, 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, 2]
【问题讨论】:
这个网站上已经有很多关于多类 ROC 曲线的问题。你看过他们吗?例如,15 秒的搜索会产生 ***.com/questions/50941223/… 、 ***.com/questions/37017400/… 或 ***.com/questions/33547965/… ... 这能回答你的问题吗? Computing AUC and ROC curve from multi-class data in scikit-learn (sklearn)? 【参考方案1】:ROC 曲线通常使用非阈值数据绘制,请参阅 sklearn 实现的二进制 roc 曲线。多类 roc 曲线也有一些扩展(通常也用于非阈值预测),但还有比这更好的指标。
【讨论】:
【参考方案2】:你可以使用它,因为它是二进制的,你应该确定你在 roc_curve
我设置的 pos_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, truepr, 'b', label = 'AUC = %0.2f' % roc_auc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
【讨论】:
我应该在绘图前编辑我的标签吗?例如,如果我的真实类和预测类相同且为 4,是否会因为它不是 1 而被认为是错误的?(pos_label = 1)【参考方案3】:可能使用与 ROC 曲线不同的指标,因为它们不太适合用例。
【讨论】:
这不是一个非常有用的答案。您至少可以举一些例子吗?以上是关于如何从真实类和预测类绘制多类 Roc 曲线的主要内容,如果未能解决你的问题,请参考以下文章
sklearn.metrics.roc_curve 用于多类分类