ROC曲线 和 AUC 直白详解

2023-11-07 03:40
文章标签 详解 曲线 roc auc 直白

本文主要是介绍ROC曲线 和 AUC 直白详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ROC曲线

  • 定义

在信号检测理论中,接收者操作特征曲线receiver operating characteristic curve,或者叫ROC曲线)是一种坐标图式的分析工具,用于
(1) 选择最佳的信号侦测模型、舍弃次佳的模型。
(2) 在同一模型中设定最佳阈值。

这里我们只要记得 ROC曲线 主要是用来确定一个模型的 阈值。

  • 理解
    既然我们想要直白来理解 ROC曲线,那么例子是肯定少不了的:
    假设1:感冒有三种特征,咳嗽,发烧,流鼻涕。
    假设2:如果想确定一个人是否得了感冒,可以根据三种特征来打分,每个特征可以打 0-1 分。打分越高,得感冒概率越高。
    假设3:现在你是一个医生,有100个病人来看病,你需要根据这些人的三个感冒特征给他们打分,得到如下一组数据 (编号,分数)

    (1,2) (2,2.4) (2,0.4)....(100,3)
    

    假设4:我是一个神医,能百分百确定别人是否得了感冒。然后我看了你的报告,并给每个数据都给了确定的答案,所以数据就变成了(编号,是否真感冒,分数)(其中感冒60人,正常40人)

    (1,0,2) (2,1,2.4) (2,0,0.4)....(100,1,3)
    

    好了,现在问题来了,你是给每个病人打分了,病人也知道分数越高得感冒得概率越高,但是,到底得没得感冒却没有一个标准,这个标准就是上面说的 阈值,所以接下来就是要想办法确定这个 阈值或者标准了,那么我们采用办法呢?对于这种 二分类 问题的阈值,就是我们 ROC 曲线大展身手的时候了。

  • ROC 曲线 和 阈值

    • 阈值比较小的时候:
      如果我们认为打 1 分以上的就是感冒患者,那么只要有一点症状就可以确诊为感冒了,这时候100个人,确诊感冒的可能有 80 人,但是实际呢?可能80个人中只有50个是真感冒的,。如下图
    阈值=1诊断感冒诊断正常合计
    真感冒501060
    真正常301040
    合计8020100
    • 阈值比较大的时候:
      如果我们认为打 2 分以上的才是感冒患者,这时候100个人,确诊感冒的可能有 20 人,但是实际呢?真正感冒的可是60人,你确诊20个,可能其中还有一个是误诊呢?如下图
    阈值=2诊断感冒诊断正常合计
    真感冒194160
    真正常13940
    合计2080100
    • 那么我们期望的是阈值不大不小,换句话理解就是,我们希望得到一个使得 诊断感冒/真感冒 趋于 1(如果你感冒了,我们尽量确诊),诊断感冒/真正常 趋于 0(如果你正常,尽量不误诊)的阈值。在 ROC曲线中我们叫做 真阳率 和 假阳率

    • 所以我们一点点改变阈值,就可以得到一组又一组的 真阳率 和 假阳率 ,将这一组组 真阳率 和 假阳率在坐标轴上表示出来,就是我们要的 ROC曲线,通过图形化,我们就可以很直观的取一个合适的阈值了。(这个图只是随便在网上找的,可不是这个列子的图噢,我们大概看下 ROC曲线的 样子就好了,哈哈)

      2595955-3ffc11055524eac8.png
      roc.png

好了,到这里我们大概就讲了下 ROC曲线 的由来:主要就是为了方便我们直观的求一个合适的 阈值罢了,并没有什么太高深的东西,值得一提的是,ROC 是从 预测为真的角度来看待问题的,所以我们只需要考虑 诊断感冒 这个方面来计算:诊断感冒正确的 / 真感冒诊断感冒错误的 / 真正常

AUC

  • 定义
    1. ROC曲线 与 横轴 围城的曲边形的面积
    2. 将所有样本根据算法模型预测的打分进行升序排列,随机挑选一正一负两个样本,负样本排在正样本前面的概率
      只是看文字好像不是很好理解,可以结合上面那个例子来看一看就好理解了,我们跟所有来看病的人都有打分,按照打分给他们排个序,然后随机挑选一个真得感冒 和 一个 真正常的人,看一下是不是真正常的人排在前面,如果是,那么计数为1,进行 N 次实验,所有计数的累计和 为 n,那么 n/N 就是AUC的值了,顺便提一下,最理想的情况就是 n = N了,也意味着我们的打分已经完美

定义有两种,但是他们应该如何进行理解互通呢?笔者目前也不是很清楚,尝试推理了下,也不是很明白,这里就不敢班门弄斧了,如果有大佬理解,请不吝赐教!!!非常感谢!!!这里如果有感谢兴趣的朋友,也可以查看下 这篇博客,应该是我找到的比较有深度的 auc 的计算了

  • 为什么需要 AUC
    前面我们说了 ROC曲线 可以用来给一个模型确定阈值,那么 AUC 则是来评判一个 二分类的 模型的优劣。
    如果 AUC = 1:完美预测,基本不会存在的情况。
    如果 0.5 < AUC < 1:除了完美预测,那就乘这个区间的最有价值了。
    如果 AUC = 0.5:因为是二分类,随机猜测也就是这个概率了,完全就没有价值
    如果 AUC < 0.5:比随机猜测的概率还低!!!但是反过来说,非黑即白,如果取个反呢?

总的来说,不考虑最后一种情况,AUC当然是越大 越好,如果是最后一致情况,那当然是越小越好,因为我一旦取反,那么就和第一种情况一样啦。

  • AUC 计算
    首先还是这篇博客。

    其次,我想说的是,写AUC的博客那么多,为什么没人将工作中的计算方法说上来呢?所以这里我就贴一个工作中计算方式:
    1.首先我们计算AUC肯定得有一份打完分了的数据,假设数据auc.text,内容如下:

    -1    0.12
    -1    0.13
    -1    0.16 
    1     0.2
    -1    0.21
    -1    0.23
    1     0.3
    -1    0.32
    -1    0.35
    1     0.4
    -1    0.42
    -1    0.46
    1     0.5
    -1    0.51
    -1    0.53
    1     0.7
    1     1.1
    1     1.2
    1     1.2
    
    1. 计算方法
      cat auc.text |sort -k2n|awk '($1==-1){++x;a+=y}($1==1){++y}END{print 1.0-a/(x*y)}'
      通过一个简单的 awk 就可以得出来了,至于这个公式得原理,也很简单,就是完全遵循我们定义中的第二种方式得来的,详细的过程我就不啰嗦了,如果有疑问,欢迎留言咨询

好了,本文到此就结束啦!谢谢你的阅读!!!

这篇关于ROC曲线 和 AUC 直白详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/361011

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

LabVIEW FIFO详解

在LabVIEW的FPGA开发中,FIFO(先入先出队列)是常用的数据传输机制。通过配置FIFO的属性,工程师可以在FPGA和主机之间,或不同FPGA VIs之间进行高效的数据传输。根据具体需求,FIFO有多种类型与实现方式,包括目标范围内FIFO(Target-Scoped)、DMA FIFO以及点对点流(Peer-to-Peer)。 FIFO类型 **目标范围FIFO(Target-Sc

019、JOptionPane类的常用静态方法详解

目录 JOptionPane类的常用静态方法详解 1. showInputDialog()方法 1.1基本用法 1.2带有默认值的输入框 1.3带有选项的输入对话框 1.4自定义图标的输入对话框 2. showConfirmDialog()方法 2.1基本用法 2.2自定义按钮和图标 2.3带有自定义组件的确认对话框 3. showMessageDialog()方法 3.1

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr