python绘制ROC曲线的示例代码

 更新时间:2023年07月20日 10:44:50   作者:张小李的风  
本文主要介绍了python绘制ROC曲线的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

受试者工作特征(Receiver Operating Characteristic,ROC)的基本知识

  • ROC曲线可以用来评估分类器的输出质量。
  • ROC曲线Y轴为真阳性率,X轴为假阳性率。这意味着曲线的左上角是“理想”点——假阳性率为0,真阳性率为1。
  • 上述的理想情况实际中很难存在,但它确实表示面积下曲线(AUC)越大通常分类效率越好。
  • ROC曲线的“陡度”也很重要,坡度越大,则越有降低假阳性率,升高真阳性率的趋势。
  • ROC曲线通常用于二元分类中研究分类器的输出(也可在多分类中使用,需要对标签进行二值化【比如ABC三类,进行分类时将标签进行二值化处理[A(1)、BC(0)】、【B(1)、AC(0)】、【C(1)、AB(0)】,比如本文不作讨论)。

python 实现

  • 绘制ROC曲线主要基于python 的sklearn库中的两个函数,roc_curv和auc两个函数。
  • roc_curv 用于计算出fpr(假阳性率)和tpr(真阳性率)
  • auc用于计算曲线下面积,输入为fpr、和tpr

roc_curv函数详解

  • roc_curve(y_true, y_score, pos_label=None, sample_weight=None,drop_intermediate=True)
  • 输入值
  • y_true :一个和样本数量一致的一维向量,数据是正确的二元标签。如果标签不是{- 1,1}或{0,1},则可以显式指定pos_label。
  • y_score:一个样本数量一致的一维向量,目标分数可以是阳性类的概率估计、置信度值或决策的非阈值度量(在某些分类器上由“decision_function”返回,比如SVM)。简单的理解就是对测试集进行分类后得到的一个用于衡量该类是阳性还是阴性的分数度量,分类器也是根据这个分数来判断测试集是阳性样本还是阴性样本,因此通常都可以在分类器的中间过程拿到这个分数。
  • pos_label:样本标签,如果y_true不满足{0,1},{-1,1}标签时则需要通过该参数指定那些是阳性样本,其余的则为阴性样本,默认不输入。
  • sample_weight:一个样本数量一致的一维向量,指定每个样本的权重,默认不输入。
  • drop_intermediate:为true时(默认= True)会删除一些不会出现在ROC曲线上的次优阈值。
  • 返回值
  • fpr:假阳性率序列,数量与thread一致的一维向量。
  • tpr:真阳性率序列,数量与thread一致的一维向量。
  • thread:该序列是一个递减序列,在每一个阈值下对y_score进行划分,大于的视为阳性,小于的视为阴性,从而计算出该阈值下的fpr。

代码示例

# 导包
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
# 计算
fpr, tpr, thread = roc_curve(y_test, y_score)
roc_auc[i] = auc(fpr, tpr)
# 绘图
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange',
         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, 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 example')
plt.legend(loc="lower right")
plt.savefig('roc.png',)
plt.show()

y_test 数据示例:

0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1

y_score:数据示例:

-0.763011 -0.202245 0.118015 -0.907809 -0.0111619 -0.604873 0.0228349 -0.610769 -0.375728
 -0.470174 -0.422242 -0.335587 -0.227239 -0.0785673  -0.533834 0.121637 -0.713569 -0.551115 
 0.379913 -0.111076

更多SVM及ROC的介绍见文章:

python基于sklearn的SVM和留一法(LOOCV)进行二分类
python:Sklearn SVM使用留一法时如何绘制ROC曲线与计算AUC

到此这篇关于python绘制ROC曲线的示例代码的文章就介绍到这了,更多相关python绘制ROC曲线内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • numpy:np.newaxis 实现将行向量转换成列向量

    numpy:np.newaxis 实现将行向量转换成列向量

    今天小编就为大家分享一篇numpy:np.newaxis 实现将行向量转换成列向量,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python 关于反射和类的特殊成员方法

    Python 关于反射和类的特殊成员方法

    本文给大家分享python关于反射和类的特殊成员方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-09-09
  • xadmin使用formfield_for_dbfield函数过滤下拉表单实例

    xadmin使用formfield_for_dbfield函数过滤下拉表单实例

    这篇文章主要介绍了xadmin使用formfield_for_dbfield函数过滤下拉表单实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python3操作微信itchat实现发送图片

    python3操作微信itchat实现发送图片

    这篇文章主要为大家详细介绍了python3操作微信itchat实现发送图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Python Panda中索引和选择 series 的数据

    Python Panda中索引和选择 series 的数据

    这篇文章主要介绍了Python Panda中索引和选择series的数据,文章通过围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Python字典中的值求和两种方法

    Python字典中的值求和两种方法

    在Python中字典是一种无序的数据结构,它由一系列键和对应的值组成,有时候我们需要对字典中的键对应的值进行求和操作,这篇文章主要给大家介绍了关于Python字典中值求和两种方法的相关资料,需要的朋友可以参考下
    2023-11-11
  • Python日志处理模块logging用法解析

    Python日志处理模块logging用法解析

    这篇文章主要介绍了Python日志处理模块logging用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 使用Pytorch训练two-head网络的操作

    使用Pytorch训练two-head网络的操作

    这篇文章主要介绍了使用Pytorch训练two-head网络的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python文件操作整理汇总

    python文件操作整理汇总

    本文主要记录了个人在项目中遇到的一些Python中对于文件、文件夹的操作需要涉及到的函数等内容,非常的详尽,有需要的可以参考下
    2014-10-10
  • python第三方库visdom的使用入门教程

    python第三方库visdom的使用入门教程

    Visdom:一个灵活的可视化工具,可用来对于 实时,富数据的 创建,组织和共享,本文主要介绍了python第三方库visdom的使用入门教程,分享给大家,感兴趣的可以了解一下
    2021-05-05

最新评论