ROC曲线与AUC值

转载自:https://www.cnblogs.com/gatherstars/p/6084696.html

1.概述

  AUC(Area Under roc Curve)是一种用来度量分类模型好坏的一个标准。这样的标准其实有很多,例如:大约10年前在machine learning文献中一统天下的标准:分类精度;在信息检索(IR)领域中常用的recall和precision,等等。其实,度量反应了人们对”好”的分类结果的追求,同一时期的不同的度量反映了人们对什么是”好”这个最根本问题的不同认识,而不同时期流行的度量则反映了人们认识事物的深度的变化。

  近年来,随着machine learning的相关技术从实验室走向实际应用,一些实际的问题对度量标准提出了新的需求。特别的,现实中样本在不同类别上的不均衡分布(class distribution imbalance problem)。使得accuracy这样的传统的度量标准不能恰当的反应分类器的performance。举个例子:测试样本中有A类样本90个,B 类样本10个。分类器C1把所有的测试样本都分成了A类,分类器C2把A类的90个样本分对了70个,B类的10个样本分对了5个。则C1的分类精度为 90%,C2的分类精度为75%。但是,显然C2更有用些。另外,在一些分类问题中犯不同的错误代价是不同的(cost sensitive learning)。这样,默认0.5为分类阈值的传统做法也显得不恰当了。

为了解决上述问题,人们从医疗分析领域引入了一种新的分类模型performance评判方法——ROC分析。ROC分析本身就是一个很丰富的内容,有兴趣的读者可以自行Google,这里只做些简单的概念性的介绍。

  ROC的全名叫做Receiver Operating Characteristic,其主要分析工具是一个画在二维平面上的曲线——ROC curve。平面的横坐标是false positive rate(FPR),纵坐标是true positive rate(TPR)。对某个分类器而言,我们可以根据其在测试样本上的表现得到一个TPR和FPR点对。这样,此分类器就可以映射成ROC平面上的一个点。调整这个分类器分类时候使用的阈值,我们就可以得到一个经过(0, 0),(1, 1)的曲线,这就是此分类器的ROC曲线。一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。因为(0, 0)和(1, 1)连线形成的ROC曲线实际上代表的是一个随机分类器。如果很不幸,你得到一个位于此直线下方的分类器的话,一个直观的补救办法就是把所有的预测结果反向,即:分类器输出结果为正类,则最终分类的结果为负类,反之,则为正类。虽然,用ROC curve来表示分类器的performance很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的performance。

2.ROC曲线

2.1ROC的动机

  对于0,1两类分类问题,一些分类器得到的结果往往不是0,1这样的标签,如神经网络得到诸如0.5,0.8这样的分类结果。这时,我们人为取一个阈值,比如0.4,那么小于0.4的归为0类,大于等于0.4的归为1类,可以得到一个分类结果。同样,这个阈值我们可以取0.1或0.2等等。取不同的阈值,最后得到的分类情况也就不同。如下面这幅图:

  蓝色表示原始为负类分类得到的统计图,红色表示原始为正类得到的统计图。那么我们取一条直线,直线左边分为负类,直线右边分为正类,这条直线也就是我们所取的阈值。阈值不同,可以得到不同的结果,但是由分类器决定的统计图始终是不变的。这时候就需要一个独立于阈值,只与分类器有关的评价指标,来衡量特定分类器的好坏。还有在类不平衡的情况下,如正样本有90个,负样本有10个,直接把所有样本分类为正样本,得到识别率为90%,但这显然是没有意义的。如上就是ROC曲线的动机。

2.2ROC的定义

  关于两类分类问题,原始类为positive、negative,分类后的类别为p'、n'。排列组合后得到4种结果,如下图所示:

 

  于是我们得到四个指标,分别为:真阳、伪阳、伪阴、真阴。ROC空间将伪阳性率(FPR)定义为 X 轴,真阳性率(TPR)定义为 Y 轴。这两个值由上面四个值计算得到,公式如下:

  TPR:在所有实际为阳性的样本中,被正确地判断为阳性之比率。TPR=TP/(TP+FN)

  FPR:在所有实际为阴性的样本中,被错误地判断为阳性之比率。FPR=FP/(FP+TN)

  放在具体领域来理解上述两个指标。如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。

2.3ROC的图形化表示

  我们以FPR为横轴,TPR为纵轴,得到如下ROC空间:

  我们可以看出:左上角的点(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对;点A(TPR>FPR),医生A的判断大体是正确的。中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;下半平面的点C(TPR<FPR),这个医生说你有病,那么你很可能没有病,医生C的话我们要反着听,为真庸医。

上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是遍历所有的阈值,得到ROC曲线。还是一开始的那幅图,假设如下就是某个医生的诊断统计图,直线代表阈值。我们遍历所有的阈值,能够在ROC平面上得到如下的ROC曲线。

  曲线距离左上角越近,证明分类器效果越好。

  如上,是三条ROC曲线,在0.23处取一条直线。那么,在同样的FPR=0.23的情况下,红色分类器得到更高的TPR。也就表明,ROC越往上,分类器效果越好。我们用一个标量值AUC来量化他。

3.AUC值

3.1AUC值的定义

  AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。

  AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。

  0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

  AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。

  AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

3.2AUC值的物理意义

  假设分类器的输出是样本属于正类的socre(置信度),则AUC的物理意义为,任取一对(正、负)样本,正样本的score大于负样本的score的概率。

3.3AUC值的计算

  (1)第一种方法:AUC为ROC曲线下的面积,那我们直接计算面积可得。面积为一个个小的梯形面积之和,计算的精度与阈值的精度有关。

  (2)第二种方法:根据AUC的物理意义,我们计算正样本score大于负样本的score的概率。取N*M(N为正样本数,M为负样本数)个二元组,比较score,最后得到AUC。时间复杂度为O(N*M)。

  (3)第三种方法:与第二种方法相似,直接计算正样本score大于负样本的score的概率。我们首先把所有样本按照score排序,依次用rank表示他们,如最大score的样本,rank=n(n=N+M),其次为n-1。那么对于正样本中rank最大的样本(rank_max),有M-1个其他正样本比他score小,那么就有(rank_max-1)-(M-1)个负样本比他score小。其次为(rank_second-1)-(M-2)。最后我们得到正样本大于负样本的概率为:

时间复杂度为O(N+M)。

<think>好的,用户想了解ROC曲线AUC的概念及其关系,包括定义、计算方法和在机器学习中的应用。我需要根据用户提供的四个引用资料来整理回答,确保准确引用相关内容。 首先,明确ROC曲线的定义。引用[1]提到ROC曲线是接收者操作特征曲线,用于评估二分类模型在不同阈下的表现。横轴是假正率,纵轴是真正率。需要解释每个轴的含义,以及曲线如何反映模型性能。 接下来是AUC的定义。引用[3]指出AUCROC曲线下的面积,用来量化模型的整体性能。越大表示模型越好,1代表完美,0.5相当于随机猜测。需要强调AUC的意义和判断标准。 关于两者的关系,引用[1]和[3]都说明ROC曲线展示不同阈下的表现,而AUC提供一个综合指标。如果ROC曲线被另一条完全包住,则后者更优;若交叉,则需比较AUC。这部分需要结合引用内容详细说明。 计算方法是重点之一。引用[4]提到Python中计算AUC的方法,比如梯形法则积分。同时引用[3]提到通过排序样本预测,计算正样本排在负样本前的概率。需要分步骤解释如何绘制ROC曲线和计算AUC,包括具体公式和示例。 机器学习中的应用部分,引用[2]和[4]指出AUC对不平衡数据的容忍度高,适合比较不同模型。需要提到常见库如scikit-learn中的实现,以及实际应用中的注意事项,比如数据分布和阈选择。 在生成相关问题时,需覆盖概念、计算、应用、比较和实际使用中的问题。确保问题能够引导用户进一步深入学习。 最后,检查引用是否正确标注,确保每个引用标记对应正确的资料,并自然融入回答中。避免技术术语过于复杂,保持解释清晰易懂。同时注意格式要求,数学公式使用$...$,独立公式用$$...$$,如真正率公式需单独成段。 现在整理结构:定义部分分ROCAUC,关系部分说明互补作用,计算方法分步骤,应用场景和注意事项。相关问题覆盖定义、计算、应用、比较和工具使用。</think>### ROC曲线AUC的概念及其关系 #### 一、定义 1. **ROC曲线**(接收者操作特征曲线ROC曲线以假正率($FPR$)为横轴、真正率($TPR$)为纵轴,描述二分类模型在不同分类阈下的性能表现[^1]。其核心公式为: $$TPR = \frac{TP}{TP + FN}, \quad FPR = \frac{FP}{TN + FP}$$ 其中,$TP$(真正例)、$FN$(假反例)、$FP$(假正例)、$TN$(真反例)构成混淆矩阵。 2. **AUC**(曲线下面积) AUCROC曲线下方的面积,用于量化模型的整体分类能力。AUC范围为$[0,1]$: - $AUC=1$:完美分类器; - $AUC=0.5$:相当于随机猜测; - $AUC>0.5$:模型优于随机分类[^3]。 #### 二、ROC曲线AUC的关系 - **互补性**:ROC曲线展示模型在不同阈下的表现,而AUC通过面积综合评估整体性能[^1]。 - **模型比较**: - 若模型A的ROC曲线完全包住模型B的曲线,则A的性能更优; - 若曲线交叉,需比较AUCAUC越大模型越好[^3]。 #### 三、计算方法 1. **ROC曲线绘制步骤**: - 对测试样本的预测概率从高到低排序; - 依次将每个概率作为阈,计算对应的$TPR$和$FPR$; - 连接所有$(FPR, TPR)$点形成曲线[^4]。 2. **AUC计算**: - **积分法**:对ROC曲线进行梯形法则积分,公式为: $$AUC = \sum_{i=1}^{n} \frac{(FPR_i - FPR_{i-1}) \cdot (TPR_i + TPR_{i-1})}{2}$$ - **概率法**:随机选取一个正样本和一个负样本,AUC等于正样本预测概率高于负样本的概率[^3]。 #### 四、应用场景注意事项 1. **适用场景**: - 二分类问题,尤其类别不平衡时(如欺诈检测、疾病诊断)[^2]; - 需要全面评估模型在不同阈下的表现。 2. **注意事项**: - AUC对类别分布不敏感,但需结合业务需求选择阈; - 若关注少数类(如癌症检测),需同时参考精确率-召回率曲线(P-R曲线)[^3]。 #### 示例代码(Python) ```python from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt # 假设 y_true为真实标签,y_score为预测概率 fpr, tpr, thresholds = roc_curve(y_true, y_score) roc_auc = auc(fpr, tpr) plt.plot(fpr, tpr, label=f'AUC = {roc_auc:.2f}') plt.plot([0,1], [0,1], linestyle='--') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.legend() plt.show() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值