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

yizhihongxing

针对这个问题,可以按照以下步骤绘制多个模型的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技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Python进阶之利用+和*进行列表拼接

    在Python中,可以使用+和运算符对列表进行拼接。+运算符用于将两个列表连接起来,运算符用于将一个列表重复多次。下面将介绍两个示例分别演示了如何使用+和*运算符对列表进行拼接。 示例一:使用+运算符进行列表拼接 # 使用+运算符进行列表拼接 list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = list1 + list2 …

    python 2023年5月13日
    00
  • Python实现识别手写数字大纲

    以下是关于“Python实现识别手写数字大纲”的完整攻略: 简介 识别手写数字是机器学习中的一个经典问题。本教程将介绍如何使用Python实现识别手写数字,并提供两个示例。 数据集 我们将使用MNIST数据集来训练和测试我们的模型。MNIST数据集包含60,000个训练图像和10,000个测试图像,每个图像都是28×28像素的灰度图像。我们将使用Python…

    python 2023年5月14日
    00
  • Python常用外部指令执行代码实例

    在Python中,我们可以使用subprocess模块来执行外部指令。subprocess模块提供了一个简单的接口,可以在Python中执行外部指令,并获取其输出。本文将为您提供一个完整攻略,详细讲解subprocess模块的用法,并提供两个示例说明。 1. subprocess模块的用法 subprocess模块提供了多个函数可以在Python中执行外部指…

    python 2023年5月14日
    00
  • 一文带你掌握Python中多线程和线程池的使用方法

    Python中多线程和线程池的使用方法 本文将详细讲解如何在Python中使用多线程和线程池。我们将从多线程的基本概念开始,一步步地介绍如何使用Python的threading模块和concurrent.futures模块实现多线程和线程池。 多线程基础概念 在使用Python中的多线程和线程池之前,我们需要了解一些基本概念: 线程 线程是操作系统中最小的执…

    python 2023年5月15日
    00
  • Python2与python3中 for 循环语句基础与实例分析

    一、Python2与Python3在for循环语句基础上的不同 在Python2中,range()函数返回的是一个列表类型,而在Python3中则返回一个range对象。由于Python2中range()函数返回的是列表类型,在for循环中使用时,会先生成整个列表,再进行迭代,对于大数据量的情况会消耗大量的内存。而在Python3中,range对象只有在被需…

    python 2023年6月6日
    00
  • Python 实现自动获取种子磁力链接方式

    Python实现自动获取种子磁力链接方式是指使用Python编程语言,通过爬虫技术自动获取种子磁力链接的方法。本文将讲解Python实现自动获取种子磁力链接方式的完整攻略,包括以下几个方面: 确定目标网站和爬虫策略 使用Python爬虫库获取网页内容 使用正则表达式或解析库提取种子磁力链接 实践示例 确定目标网站和爬虫策略 首先,我们需要确定目标网站和爬虫策…

    python 2023年5月15日
    00
  • Python3标准库总结

    下面是详细的攻略: Python3标准库总结 Python3标准库是Python3自带的一组模块,包含了大量的常用功能,如文件操作、网络通信、多线程、正则表达式、日期时间处理等。本文将对Python3标准库进行总结,并提供两个示例说明。 常用模块 Python3标准库包含了大量的模块,下面是一些常用的模块: os:提供了访问操作系统功能的接口,如文件操作、进…

    python 2023年5月14日
    00
  • Python 中的集合和字典

    Python中的集合和字典都是内置数据结构,它们在处理大量数据时提供了高效而强大的工具和方法。 集合 集合(set)是一种可变无序容器,其中没有重复的元素。Python中的集合类似于数学中的集合,支持交集、并集、差集等运算。 创建集合 可以使用 {} 或 set() 来创建集合。注意,如果要创建空集合,必须使用 set(),因为 {} 会创建空字典而不是集合…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部