什么是ROC曲线?可以参见(https://blog.csdn.net/hesongzefairy/article/details/104295431)

现在我们知道ROC曲线上的一组组(FPR,TPR)值是通过改变阈值得到,那么具体在程序中是如何实现的?

首先我们需要了解sklearn.metrics中的roc_curve方法(metrics是度量、指标,curve是曲线)

roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=None)

参数含义:

y_true:简单来说就是label,范围在(0,1)或(-1,1)的二进制标签,若非二进制则需提供pos_label。

y_score:模型预测的类别概率值。

pos_label:label中被认定为正样本的标签。若label=[1,2,2,1]且pos_label=2,则2为positive,其他为negative。

sample_weight:采样权重,可选择一部分来计算。

drop_intermediate:可以去掉一些对ROC曲线不好的阈值,使得曲线展现的性能更好。

返回值:(tpr,fpr,thershold)

tpr:根据不同阈值得到一组tpr值。

fpr:根据不同阈值的到一组fpr值,与tpr一一对应。(这两个值就是绘制ROC曲线的关键)

thresholds:选择的不同阈值,按照降序排列。

有了以上参数和返回值的基础,举个例子来验证一下:

from sklearn.metrics import roc_curvey_label = ([1, 1, 1, 2, 2, 2])  # 非二进制需要pos_label
y_pre = ([0.3, 0.5, 0.9, 0.8, 0.4, 0.6])
fpr, tpr, thersholds = roc_curve(y_label, y_pre, pos_label=2)for i, value in enumerate(thersholds):print("%f %f %f" % (fpr[i], tpr[i], value))

输出结果:

分析:

代码中故意将label设置为非二进制,展示了pos_label这个参数的用处,如果pos_label设置错误程序会报错,大家可以自己尝试,y_label是标签,y_pre和y_labe相对应是模型预测为label的概率值,当pos_label=2则标签为2的看作正样本,标签为1的看做负样本。

我们都知道ROC曲线是需要通过改变阈值来获取一组组(fprp, tpr),那么roc_curve方法中是如何选取阈值

从输出结果可以看到,第三列代表返回值thersholds记录的就是roc_curve所选取的阈值,其阈值就是将y_pre降序排列并依次选取,如果选取的阈值对fpr和tpr值无影响则忽略,输出结果中没有记录阈值为0.8时情况。

需要注意的是,输出结果第一行therholds=1.9,这个值很奇怪,乍一看不知道为什么会出现这个值。这里我们阅读sklearn官网的原文对therholds这个参数的解释:

Decreasing thresholds on the decision function used to compute fpr and tpr. thresholds[0] represents no instances being predicted and is arbitrarily set to max(y_score) + 1.

thresholds[0] 表示没有任何预测的实例 并且被设置为max(y_score) + 1,这样就知道1.9其实是y_pre中最大的0.9 +1,再简单点来说,第一行其实就是ROC曲线的起点(0,0)。

到这里roc_curve方法的用法应该已经非常清楚了,画ROC曲线之前还有一个评估模型优劣重要的值AUC需要得到。

算AUC的方法很简单,使用auc方法即可。

from sklearn.metrics import aucroc_auc = auc(fpr, tpr)

最后就是画出ROC曲线了,完整代码如下:

from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plty_label = ([1, 1, 1, 2, 2, 2])  # 非二进制需要pos_label
y_pre = ([0.3, 0.5, 0.9, 0.8, 0.4, 0.6])
fpr, tpr, thersholds = roc_curve(y_label, y_pre, pos_label=2)for i, value in enumerate(thersholds):print("%f %f %f" % (fpr[i], tpr[i], value))roc_auc = auc(fpr, tpr)plt.plot(fpr, tpr, 'k--', label='ROC (area = {0:.2f})'.format(roc_auc), lw=2)plt.xlim([-0.05, 1.05])  # 设置x、y轴的上下限,以免和边缘重合,更好的观察图像的整体
plt.ylim([-0.05, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')  # 可以使用中文,但需要导入一些库即字体
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()

输出结果:

Python下使用sklearn绘制ROC曲线(超详细)相关推荐

  1. sklearn 绘制roc曲线_如何用Tensorflow和scikit-learn绘制ROC曲线?

    我试图从tensorflow提供的CIFAR-10示例的修改版本绘制ROC曲线.它现在为2类,而不是10如何用Tensorflow和scikit-learn绘制ROC曲线? 的网络的输出被称为logi ...

  2. python的roc曲线与阈值_python 使用sklearn绘制roc曲线选取合适的分类阈值

    https://zhuanlan.zhihu.com/p/26293316 比如, 我已经初步训练好了一个模型,现在我想用这个模型从海量的无标记数据集挖掘出某一类数据A,并且想要尽量不包含其他所有类B ...

  3. sklearn 绘制roc曲线_sklearn——逻辑回归、ROC曲线与KS曲线

    一.sklearn中逻辑回归的相关类 在sklearn的逻辑回归中,主要用LogisticRegression和LogisticRegressionCV两个类来构建模型,两者的区别仅在于交叉验证与正则 ...

  4. MATLAB绘制ROC曲线并计算AUC值

    最近需要比较不同CNN网络的分类效果,用到了Auc值,所以学习了下用MATLAB绘制ROC曲线并计算Auc值的代码,总结如下. 1. 子函数代码: % 计算AUC值,同时绘制ROC曲线 % 二值分类, ...

  5. python:Sklearn SVM使用留一法时如何绘制ROC曲线与计算AUC

    在前面的一篇文章我们给出了使用Sklearn 中的SVM进行分类时如何使用留一法来进行分类. python基于sklearn的SVM和留一法(LOOCV)进行二分类 如何在使用留一法时绘制ROC曲线和 ...

  6. Sklearn机器学习——ROC曲线、ROC曲线的绘制和AUC面积、运用ROC曲线找到最佳阈值

    目录 1 ROC曲线 2 ROC曲线的绘制 2.1 Sklearn中的ROC曲线和AUC面积 2.2 利用ROC曲线找到最佳阈值 1 ROC曲线 上篇博客介绍了ROC曲线的概率和阈值还有SVM实现概率 ...

  7. 机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线

    文章目录 前言 一.ROC与AUC 1.ROC 2.AUC 二.代码实现 总结 前言 内容接上一篇机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线_fanstuck的博客-CSDN博客_ ...

  8. 基于python绘制ROC曲线

    基于python绘制ROC曲线,直接附代码: from sklearn.metrics import roc_curve, auc from sklearn.model_selection impor ...

  9. python实现绘制ROC曲线寻找指标最佳诊断临界值

    实现功能: 根据患者的诊断结果以及某一个诊断指标数值,绘制ROC曲线,寻找出这个指标的最佳诊断临界值,并在曲线中标记出此时的坐标. 实现代码: import numpy as np import ma ...

最新文章

  1. Oracle—dmp表的导入导出
  2. 用python写脚本看什么书-你用 Python 写过哪些有趣的脚本?
  3. 给自己Mark一下要学习的东西
  4. Linux文件系统之dd
  5. 有趣的MS Live Labs
  6. mysql union order_MySQL中union和order by同时使用的实现方法
  7. excel批量插入 配置yml
  8. 5个数中取三个数组合 不重复 php,PHP产生不重复随机数的5个方法总结
  9. python文件移动到文件夹_python – 将文件夹中的文件移动到顶级目录
  10. mysql内核测试,MySQL 5.7内核复制中的一个小坑
  11. Android 身份证拍照 识别 文字识别 (百度)
  12. Duilib使用wke显示echarts
  13. 第四章——波形与矢量AWGN信道
  14. hadoop学习路线
  15. 阿里云配置安全组规则完整教程汇总
  16. 计算机无法访问iTunes,无法连接到iTunes Store解决方法介绍
  17. 美国南加州大学骆沁毅:构建高性能的异构分布式训练算法
  18. c语言%u的作用,C语言中%p,%u,%lu都有什么用处
  19. Oracle 字段自增
  20. uart驱动框架及编程方法

热门文章

  1. 中职计算机网络技术 课件,中职课件
  2. cytoscape使用方法_Cytoscape中文教程(2)
  3. Cytoscape 安装教程 | Network Data Integration, Analysis, and Visualization in a Box
  4. Unity WebGL支持浏览器说明
  5. 计算机软件硬件边界如何定义,软件定义汽车,但别忘了硬件定义了软件的边界...
  6. 三维模型还原记忆中的老房子!居然是她的毕业作品....
  7. PCB BOM单制作规范
  8. python列表如何求增长率_python求平均值
  9. 用于情绪识别的生物信号数据集汇总
  10. 第17集丨如何为成功“保鲜”