python如何将多个模型的ROC曲线绘制在一张图(含图例)

  

针对这个问题,可以按照以下步骤绘制多个模型的ROC曲线并显示图例:

1. 准备数据

首先需要准备多个模型预测结果的真实标签和预测概率值,可以使用sklearn中自带的datasets中的样例数据或者自己准备数据。这里以手写数字识别数据集为例子。

from sklearn import datasets
from sklearn.model_selection import train_test_split

digits = datasets.load_digits()
X = digits.data
y = digits.target

#划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

2. 训练模型

使用Logistic Regression和SVM两种不同的模型对手写数字数据进行训练,并预测测试集。

from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC

#Logistic Regression模型
clf1 = LogisticRegression(random_state=42)
clf1.fit(X_train, y_train)
y_prob1 = clf1.predict_proba(X_test)[:, 1]

#SVM模型
clf2 = SVC(random_state=42, probability=True)
clf2.fit(X_train, y_train)
y_prob2 = clf2.predict_proba(X_test)[:, 1]

3. 绘制ROC曲线

通过使用ROC曲线(y_true, y_score, ...)可以绘制ROC曲线,其中y_true为真实标签,y_score为预测概率值。我们可以重复调用roc_curve()函数,绘制多个模型的ROC曲线。最后将多个ROC曲线绘制在同一张图上,方便进行比较。

from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt

#计算ROC值
fpr1, tpr1, thresholds1 = roc_curve(y_test, y_prob1)
roc_auc1 = roc_auc_score(y_test, y_prob1)

fpr2, tpr2, thresholds2 = roc_curve(y_test, y_prob2)
roc_auc2 = roc_auc_score(y_test, y_prob2)

# 绘制ROC曲线
plt.plot(fpr1, tpr1, color='darkorange', label='LR ROC curve (area = %0.2f)' % roc_auc1)
plt.plot(fpr2, tpr2, color='blue', label='SVM ROC curve (area = %0.2f)' % roc_auc2)

plt.plot([0, 1], [0, 1], color='navy', linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic (ROC) curve')
plt.legend(loc="lower right")
plt.show()

4. 结果说明

这样我们就得到了两个模型的ROC曲线,并将它们一起绘制在同一张图上。图中的橙色线代表Logistic Regression模型的ROC曲线,蓝色线代表SVM模型的ROC曲线,图例中也有对应标记。

5. 示例

另外,这里提供一个更加详细和完整的关于如何绘制多个模型ROC曲线的示例链接,可以参考学习:Python如何绘制多个ROC curve曲线。

相关文章