ROC曲线的含义以及画法

ROC曲线的含义以及画法**ROC的含义及画法**ROC的全名叫做ReceiverOperatingCharacteristic(受试者工作特征曲线),又称为感受性曲线(sensitivitycurve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。其主要分析工具是一个画在二维平面上的曲线——ROC曲线。ROC曲线以真正例率TPR为纵轴,以假正例率FPR为横轴,在不同的阈值下获得坐标点,并连接各个坐标点,得到ROC曲线。对于一个分类任务

大家好,又见面了,我是你们的朋友全栈君。

ROC的含义及画法

ROC的全名叫做Receiver Operating Characteristic(受试者工作特征曲线 ),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。其主要分析工具是一个画在二维平面上的曲线——ROC 曲线。ROC曲线以真正例率TPR为纵轴,以假正例率FPR为横轴,在不同的阈值下获得坐标点,并连接各个坐标点,得到ROC曲线。
对于一个分类任务的测试集,其本身有正负两类标签,我们对于这个测试集有一个预测标签,也是正负值。分类器开始对样本进行分类时,首先会计算该样本属于正确类别的概率,进而对样本的类别进行预测。比如说给出一组图片,让分类器判断该图片是否为汉堡,分类器在开始分类前会首先计算该图片为汉堡的概率,进而对该图片的类别进行预测,是汉堡或者不是汉堡。我们用概率来表示横坐标,真实类别表示纵坐标,分类器在测试集上的效果就可以用散点图来表示,如图所示
在这里插入图片描述
那么如何通过概率来获得预测的类别呢?
通常我们会设置一个阈值,这里以0.5为例。
当概率≥0.5时,分类器认为这张图片是汉堡,也就是图中虚线右边的部分,我们用橙色来表示;
当概率<0.5时,分类器认为这张图片不是汉堡,也就是图中虚线左边的部分,我们用薄荷绿来表示;
在这里插入图片描述
我们可以根据图中的预测结果得到一个混淆矩阵
在这里插入图片描述
故而当阈值只有0.5的时候,有且仅有一个混淆矩阵与之对应。
但实际上我们的阈值可以取0-1之间的任何一个数,因此我们可以得到很多个混淆矩阵
在这里插入图片描述
有没有一种方法能把所有的混淆矩阵表示在同一个二维空间内呢?
这时ROC曲线便能把它们全部表示出来,ROC曲线的横纵坐标分别是FPR(False Positive Rate)和TPR(True Positive Rate),对于任意一个混淆矩阵(如图)
在这里插入图片描述

其TPR和FPR的计算公式为
在这里插入图片描述
这时我们就能在二维空间中找出一个唯一的点来与一个混淆矩阵相对应,当我们有很多个混淆矩阵的时候,对应的二维空间中就会有很多个点,如果我们把这些点连起来,那么构成的曲线便是我们的ROC曲线
回到刚才那个对图片进行分类的例子,当阈值在[0,0.1]区间时,分类器认为所有的图片都是汉堡,这时我们就能得到一个混淆矩阵以及该混淆矩阵中TPR和FPR的值,同时在二维平面坐标轴中得到一个坐标为(1,1)的点
在这里插入图片描述
同理,当我们的阈值取(0.1,0.2],(0.2,0.3],…,(0.9,1]时,都会有一个新的混淆矩阵的TPR和FPR的值与之对应,同时二维空间中也会出现一个新的点与之对应,知道阈值取到最大,二维空间中找到了所有与混淆矩阵对应的点,我们把这些点连起来就得到了我们所需要的ROC曲线
在这里插入图片描述
由上可知,ROC曲线的横坐标和纵坐标其实是没有相关性的,所以不能把ROC曲线当做一个函数曲线来分析,应该把ROC曲线看成无数个点,每个点都代表一个分类器,其横纵坐标表征了这个分类器的性能。
为什么使用ROC曲线?
因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。下图是ROC曲线和Precision-Recall曲线的对比:
在这里插入图片描述
在这里插入图片描述
在上图中,(a)和( c )为ROC曲线,(b)和(d)为Precision-Recall(P-R)曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,( c )和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。
ROC曲线图中的四个点
第一个点:(0,1),即FPR=0, TPR=1,这意味着FN=0,并且FP=0。这是完美的分类器,它将所有的样本都正确分类。
第二个点:(1,0),即FPR=1,TPR=0,类似地分析可以发现这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。
第三个点:(0,0),即FPR=TPR=0,即FP=TP=0,可以发现该分类器预测所有的样本都为负样本(negative)。
第四个点:(1,1),即分类器实际上预测所有的样本都为正样本。
经过以上的分析,ROC曲线越接近左上角,该分类器的性能越好。

AUC的含义

AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。
下面ROCA曲线和ROCB曲线哪条曲线对应的分类器效果更好呢?
在这里插入图片描述
根据TPR和FPR的公式我们可知,TPR的分母P和FPR的分母N对应于同一个测试集都是不变的,在分类过程中如果想获得更准确的分类结果,我们需要让TP更可能的大,FP更可能的小,也就是说我们想让TPR尽可能的大,FPR尽可能的小,故而在左边的二维空间内,曲线越靠近左上角,效果越好。
那么我们可不可以通过一个值而不是看曲线图的方式来判断曲线A和B哪个分类效果好,我们通过曲线与X轴、坐标(1,0)和(1,1)所连成的直线围成的面积来判断曲线A和B所对应的分类器的分类效果,面积越大,则说明该分类器越好,这个面积就是我们所说的AUC值。

简单说:AUC值越大的分类器,正确率越高。

AUC=1,完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
0.5<AUC<1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
AUC=0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
AUC<0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测,因此不存在 AUC<0.5 的情况。
如过是多分类问题呢?如何计算AUC的值呢?
我们可以求得宏观的AUC和微观的AUC
对于宏观的AUC来说,针对每一个类别我们都可以画出对应的ROC曲线,求出对应的AUC值,最后对于所有的AUC的值求某种平均作为整个模型所有类别的宏观AUC值。
对于微观的AUC来说,假设我们的概率预测结果如下图所示,每一行表示一个样本被预测成各个类别的概率,每一行的概率之和为1,橙色方块表示该样本所属的真实类别,样本1对应的真实类别为C1,样本2对应的真实类别为C3。

在这里插入图片描述
至此我们可以得到一个经过转化的预测结果,如下图
在这里插入图片描述
我们可以根据这个表来得到针对整个模型的ROC曲线以及它对应的AUC值。
图片来自于B站视频
【小萌五分钟】机器学习 | 模型评估: ROC曲线与AUC值
https://www.bilibili.com/video/BV1wz4y197LU?from=search&seid=9450810776924126752
参考博文:
https://blog.csdn.net/IT_flying625/article/details/103246932
http://charleshm.github.io/2016/03/Model-Performance/
https://zhuanlan.zhihu.com/p/26293316
https://www.jianshu.com/p/8abf429bf587
https://blog.csdn.net/ibelieve8013/article/details/106769234/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146006.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Java集合之WeakHashMap[通俗易懂]

    Java集合之WeakHashMap[通俗易懂]WeakHashMap继承于AbstractMap,同时实现了Map接口。和HashMap一样,WeakHashMap也是一个散列表,存储的内容也是键值对key-value映射,并且键和值都可以是null。WeakHashMap的键都是弱键,给定一个键,其映射的存在并不阻止垃圾回收器对该键的丢弃,使该键成为可终止,然后被回收。弱键的原理就是Entry继承了WeakReference接口,当G

  • Linux网络下载管理工具(lftp, ftp, lftpget, wget)「建议收藏」

    Linux网络下载管理工具(lftp, ftp, lftpget, wget)「建议收藏」网络客户端管理工具在Linux中,通常用网络客户端管理工具实现文件的下载与上传,主要有以下几种,分别为lftp工具,ftp工具,lftpget工具,wget工具,在centos7中,要尽量学会lftp,lftpget等工具,下面多这些工具的简单使用逐一介。lftp使用命令manlftp可查看其具体的使用方法,如果lftp工具未安装,使用yuminstalllftp命令进…

  • linux驱动编写(总结篇)[通俗易懂]

    linux驱动编写(总结篇)[通俗易懂]【声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:feixiaoxing@163.com】01、linux驱动编写(入门)02、linux驱动编写(虚拟字符设备编写)03、linux驱动编写(字符设备编写框架)04、linux驱动编写(Kconfig文件和Makefile文件)05、linux驱动编写(块设备驱动代码)06、linux驱动编写(platfo……

  • ajax怎么整理,ajax请求的五个步骤是什么?五个步骤整理

    ajax怎么整理,ajax请求的五个步骤是什么?五个步骤整理每掌握一个技术,自然要了解该技术是什么?该技术的塬理又是什么?这样我们才能更深刻的掌握改技术。今天所描述的是ajax请求的五个步骤,希望能让大家对ajax有个更深入的记忆网图在脑海中。首先,我们来回顾下ajax是什么?Ajax=异步JavaScript和XML。Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新…

  • GoLand 2021.5.1 x64激活码(最新序列号破解)

    GoLand 2021.5.1 x64激活码(最新序列号破解),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • docker部署web项目_小钢炮docker安装web

    docker部署web项目_小钢炮docker安装web前言前面我们运行的容器并没有一些什么特别的用处。接下来让我们尝试使用docker构建一个web应用程序。我们将在docker容器中运行一个PythonFlask应用来运行一个web

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号