针对这个问题,可以按照以下步骤绘制多个模型的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曲线。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python如何将多个模型的ROC曲线绘制在一张图(含图例) - Python技术站