深入理解ROC曲线的定义以及绘制ROC曲线过程,其与模型性能的关系,以及AUC

很多学习器是为测试样本产生一个实值或者是概率预测,然后将这个预测值和一个分类阈值(threshold)进行比较。若大于阈值,则为正类;反之为负类。根据这个学习器计算出来得预测值,我们可以将测试样本进行排序,“最可能”是正例的放在最前面,“最不可能”是正例的排在最后面,这样分类过程就相当于在这个排序中的某个”截断点”(cut point)将样本呢分为两类,前一部分为正例,后一部分为反例。

前面有precision和recall,可以根据对precision和recall的重视程度来选择截断点(cut point);但是排序本身的好坏,体现了综合考虑学习器早不同任务下的“期望泛化性能”的好坏,或者说,一般情况下泛化性能的好坏。ROC曲线则是从这个角度出发研究学习器泛化性能的有力工具。

1.TPR(True Positive Rate)真正例率和FPR(False Positive rate)假正例率

TPR=TPTP+FN=TPPTPR = \frac{TP}{TP + FN} = \frac{TP}{P} TPR=TP+FNTP​=PTP​

FPR=FPTN+FP=FPN=1−TNNFPR = \frac{FP}{TN + FP} = \frac{FP}{N} = 1 - \frac{TN}{N} FPR=TN+FPFP​=NFP​=1−NTN​

由上述公式可以看出TPR == R(recall),有关P,R,TPR,FPR的公式可以见下图:

  • 理解TPR和FPR:
  • TPR:TPR越大意味着TP越大,也就意味着对于测试样本中的所有正例来说,其中大部分都被学习器预测正确。
  • FPR:FPR越小意味着FP越小、TN越大,也就意味着FPR越小,则对于测试样例中的所有反例来说,其中大部分被学习器预测正确。
  • 由上面可以看出,一个好的模型是TPR大PFR偏小的。

2.ROC曲线

  • ROC曲线: 与前面的P-R曲线相似,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出TPR和FPR,分别以它们为横、纵坐标作图,就得到了 “ROC曲线”.与P - R曲线使用查准率、查全率为纵、横轴不同, R O C曲线的纵轴是“真正例率” (True Positive Rate,简称 TPR),横轴是“假正例率”一(False PositiveRate,简称FPR)
  • 如何绘制ROC曲线:给定m+个正例和m-个反例,根据学习器的预测结果进行排序,然后把分类阈值设为最大,即把所有样例均预测为反例,此时TPR和FPR均为0,然后把阈值依次设为每个样例的预测值,即依次将每个样例划为正例。绘制过程大致可看下面的gif动图:

  • 理解ROC曲线,不同的ROC曲线意味着什么
  • 不同的模型与不同的ROC曲线:很显然不同的算法模型对应不同的ROC曲线,超参数不同的模型也对应不同的ROC曲线。

  • 如上图所示,根据上面所说的一个结论,TPR越大,FPR越小则模型的性能就越好,图中的红色的虚线是盲猜时的POC曲线,也是一个基准,在红色上方的ROC曲线对应的模型时可取的,而红色下方的ROC曲线对应的模型时无效的。因为是盲猜,所以得到的模型的样本排序是随机的,也就意味着正反例的分布是按比例的随机分布的,所以在阈值改变的过程中,TPR和FPR是一直相等的。
  • ROC曲线上的点是一个模型上取不同阈值产生的不同的结果。
  • 理想的决策阈值理想的决策阈值是TPR越接近1,FPR越接近0。即越接近上图中蓝色的点。

3.AUC(Area Under ROC Curve)

  • AUC: AUC即ROC曲线下方的面积。
  • 与前面的P-R曲线一样,当两个P-R曲线相交时,我们需要选择一种方法来判断出两个曲线对应的模型性能孰优孰劣,AUC就是一个比较的指标。
  • 注:
  • AUC的值只是衡量各个模型的排名,其绝对值大小没有意义。
  • AUC衡量的是在不管取什么阈值的情况下,模型的性能。

针对多分类的ROC和AUC,在多分类问题中,我们可以绘制N个ROC和AUC曲线图对应N个类别,基于One vs ALL的方法。例如,如果你有三个名为X, Y和Z的类,你将有一个ROC用于X,针对Y和Z进行分类,另一个ROC用于Y,针对X和Z进行分类,第三个ROC用于Z,针对Y和X进行分类。

  • 以上文章的部分内容图片等内容参考与以下文章:
  • Classification: ROC Curve and AUC
  • https://vitalflux.com/roc-curve-auc-python-false-positive-true-positive-rate/
  • Interpreting ROC Curves, Precision-Recall Curves, and AUCs

有关Precision、Recall、F1-score以及多分类的P-R曲线的绘制和micro和macor方法的博客链接:
https://blog.csdn.net/qq_46020653/article/details/119613577
西瓜书的第二章笔记的博客链接:
https://blog.csdn.net/qq_46020653/article/details/119493200
其他有关机器学习的博客文章:

  • 机器学习中理解过拟合,训练集、验证集、测试集,模型评估、模型选择,Hold-out Method(留出法)K-fold Cross-Validation(k折交叉验证法)
  • 深度理解hold-out Method(留出法)和K-fold Cross-Validation(k折交叉验证法)
  • 深入理解Precision(查准率)、Recall(查全率/召回率)、F1-Score、P-R曲线和micro和macro方法,以及多分类问题P-R曲线
  • 决策树、理解信息熵、信息增益(ID3)、增益率(C4.5)、基尼指数(CART)、预剪枝、后剪枝、多变量决策树
  • 线性模型——最小二乘法,梯度下降,线性回归,logistic回归

深入理解ROC曲线的定义以及绘制ROC曲线过程,其与模型性能的关系,以及AUC相关推荐

  1. r roc函数_R语言中绘制ROC曲线

    两种方法: 第一种,摘自别人的方法: ROC曲线,做分类时经常会用到的一种结果表现方法.诸如此类的工作,首选工具当然是R.在CRAN上搜了一下,找到一个叫ROCR的包.尽管这个包已经很久没更新了,但用 ...

  2. matlab混淆矩阵和roc曲线,从混淆矩阵绘制ROC曲线

    我需要确定不同的分类模型预测值的能力.为了做到这一点,我需要绘制一个ROC曲线,但我正在努力开发一种方法.在 我包括了我的整个python代码以及到我使用的数据集的链接.它看起来有很多代码,但实际上很 ...

  3. html贝塞尔曲线在线,使用canvas绘制贝塞尔曲线

    1.二次贝塞尔曲线 quadraticCurveTo(cpx,cpy,x,y) //cpx,cpy表示控制点的坐标,x,y表示终点坐标: 数学公式表示如下: 二次方贝兹曲线的路径由给定点P0.P1.P ...

  4. canvas贝塞尔曲线爱心_Canvas中绘制贝塞尔曲线

    ① 什么是贝塞尔曲线? 在数学的数值分析领域中,贝济埃曲线(英语:Bézier curve,亦作"贝塞尔")是计算机图形学中相当重要的参数曲线.更高维度的广泛化贝济埃曲线就称作贝济 ...

  5. 分类模型性能评价指标:混淆矩阵、F Score、ROC曲线与AUC面积、PR曲线

    以二分类模型为例:二分类模型最终需要判断样本的结果是1还是0,或者说是positive还是negative. 评价分类模型性能的场景: 采集一个称之为测试集的数据集: 测试集的每一个样本由特征数据及其 ...

  6. [转载] MFC绘制动态曲线,用双缓冲绘图技术防闪烁

    转载的原文地址 先上效果图 随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新. 一.如何绘制动态曲线 所谓动画,都是一帧一帧的图像连续呈现在用户面前形成的.所以如果你掌握了如何绘制静态曲线,那 ...

  7. MFC绘制动态曲线,用双缓冲绘图技术防闪烁

    转载自:ZHY_ongu的博客:MFC绘制动态曲线,用双缓冲绘图技术防闪烁 先上效果图    随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新. 一.如何绘制动态曲线. 所谓动画,都是一帧一帧 ...

  8. matlab绘制频散曲线,Matlab绘制频散曲线程序代码.docx

    Matlab绘制频散曲线程序代码.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. ...

  9. java编写科赫曲线_matlab绘制peano(皮亚诺)曲线和koch(科赫曲线,雪花曲线)分形曲线...

    koch曲线 matlab plot函数绘制koch曲线程序,程序还是比较简单的,这里只绘制出了雪花的三分之一 function koch_curve(number)%number代表koch的阶数, ...

最新文章

  1. 收藏!PyTorch常用代码段合集
  2. RADIUS协议:认证与计费的鼻祖
  3. 谷歌学术公布2021年最有影响力工作,CV顶会论文“夹缝求生”!凯明 YYDS!
  4. Check the value configured in 'zookeeper.znode.parent'
  5. cookie的路径和域
  6. oauth2 增加token 返回参数_一张图搞定OAuth2.0
  7. shell按长度排序
  8. Kubernetes的控制器类型即使用案例
  9. Apache Web Server - httpd 的虚拟主机的配置
  10. IntelliJ IDEA for Mac中Maven菜单用法详解
  11. 稀疏矩阵的转置c语言程序,程序有问题求大神,稀疏矩阵转置
  12. SQL求一个表中非重复数据及其出现的次数
  13. php 管理 mysql 数据库 代码_PHP5对Mysql5的任意数据库表的管理代码示例(三)
  14. phpstorm 的下载、安装与激活
  15. Linux下MySQL数据库的备份与还原
  16. Mac 科研常用软件
  17. 电容有哪些用途?常见的九大作用
  18. 详解CSS中的百分号%设置
  19. 数据挖掘学习1--数据挖掘流程
  20. 【AI能否取代设计师】「Stable Diffusion」AI绘画黑科技将告诉你答案

热门文章

  1. 一起玩react 10分钟带你入门ant-design-pro
  2. 如何实现一个简单的网络帧同步方案
  3. openstack基础之python WSGI,paste,Routes,webob
  4. 著名的C/C++框架和第三方库(转载)
  5. 007环境搭建--iwebshop安装
  6. Mysql5.7找回root密码
  7. 互联网思维到底是什么?看完就知道……
  8. linux加载动态库问题
  9. Feign使用JPA分页类Page和Pageable抛出序列化异常
  10. (一)Scala语言——入门