AUC计算方法总结

本文详细介绍了ROC曲线的概念及绘制方法,并解释了真正类率(TPR)与负正类率(FPR)的计算方式。此外,还探讨了不同阈值下ROC曲线的变化及其在分类器性能评估中的应用,最后给出了AUC的三种计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、roc曲线

1、roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性。

横轴:负正类率(false postive rate FPR)特异度,划分实例中所有负例占所有负例的比例;(1-Specificity)

纵轴:真正类率(true postive rate TPR)灵敏度,Sensitivity(正类覆盖率)

2针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况.

(1)若一个实例是正类并且被预测为正类,即为真正类(True Postive TP)

(2)若一个实例是正类,但是被预测成为负类,即为假负类(False Negative FN)

(3)若一个实例是负类,但是被预测成为正类,即为假正类(False Postive FP)

(4)若一个实例是负类,但是被预测成为负类,即为真负类(True Negative TN)

TP:正确的肯定数目

FN:漏报,没有找到正确匹配的数目

FP:误报,没有的匹配不正确

TN:正确拒绝的非匹配数目

列联表如下,1代表正类,0代表负类:


由上表可得出横,纵轴的计算公式:

(1)真正类率(True Postive Rate)TPR: TP/(TP+FN),代表分类器预测的正类中实际正实例占所有正实例的比例。Sensitivity

(2)负正类率(False Postive Rate)FPR: FP/(FP+TN),代表分类器预测的正类中实际负实例占所有负实例的比例。1-Specificity

(3)真负类率(True Negative Rate)TNR: TN/(FP+TN),代表分类器预测的负类中实际负实例占所有负实例的比例,TNR=1-FPR。Specificity

假设采用逻辑回归分类器,其给出针对每个实例为正类的概率,那么通过设定一个阈值如0.6,概率大于等于0.6的为正类,小于0.6的为负类。对应的就可以算出一组(FPR,TPR),在平面中得到对应坐标点。随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)。

如下面这幅图,(a)图中实线为ROC曲线,线上每个点对应一个阈值。


横轴FPR:1-TNR,1-Specificity,FPR越大,预测正类中实际负类越多。

纵轴TPR:Sensitivity(正类覆盖率),TPR越大,预测正类中实际正类越多。

理想目标:TPR=1,FPR=0,即图中(0,1)点,故ROC曲线越靠拢(0,1)点,越偏离45度对角线越好,Sensitivity、Specificity越大效果越好。

二 如何画roc曲线

假设已经得出一系列样本被划分为正类的概率,然后按照大小排序,下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。


接下来,我们从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。这样一来,我们一共得到了20组FPR和TPR的值,将它们画在ROC曲线的结果如下图:


AUC(Area under Curve):Roc曲线下的面积,介于0.1和1之间。Auc作为数值可以直观的评价分类器的好坏,值越大越好。

首先AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。


二、AUC计算  


 1.  最直观的,根据AUC这个名称,我们知道,计算出ROC曲线下面的面积,就是AUC的值。事实上,这也是在早期 Machine Learning文献中常见的AUC计算方法。由于我们的测试样本是有限的。我们得到的AUC曲线必然是一个阶梯状的。因此,计算的AUC也就是这些阶梯 下面的面积之和。这样,我们先把score排序(假设score越大,此样本属于正类的概率越大),然后一边扫描就可以得到我们想要的AUC。但是,这么 做有个缺点,就是当多个测试样本的score相等的时候,我们调整一下阈值,得到的不是曲线一个阶梯往上或者往右的延展,而是斜着向上形成一个梯形。此 时,我们就需要计算这个梯形的面积。由此,我们可以看到,用这种方法计算AUC实际上是比较麻烦的。 


   2. 一个关于AUC的很有趣的性质是,它和Wilcoxon-Mann-Witney Test是等价的。这个等价关系的证明留在下篇帖子中给出。而Wilcoxon-Mann-Witney Test就是测试任意给一个正类样本和一个负类样本,正类样本的score有多大的概率大于负类样本的score。有了这个定义,我们就得到了另外一中计 算AUC的办法:得到这个概率。我们知道,在有限样本中我们常用的得到概率的办法就是通过频率来估计之。这种估计随着样本规模的扩大而逐渐逼近真实值。这 和上面的方法中,样本数越多,计算的AUC越准确类似,也和计算积分的时候,小区间划分的越细,计算的越准确是同样的道理。具体来说就是统计一下所有的 M×N(M为正类样本的数目,N为负类样本的数目)个正负样本对中,有多少个组中的正样本的score大于负样本的score。当二元组中正负样本的 score相等的时候,按照0.5计算。然后除以MN。实现这个方法的复杂度为O(n^2)。n为样本数(即n=M+N) 

 3.  第三种方法实际上和上述第二种方法是一样的,但是复杂度减小了。它也是首先对score从大到小排序,然后令最大score对应的sample 的rank为n,第二大score对应样本的rank为n-1,以此类推。然后把所有的正类样本的rank相加,再减去M-1种两个正样本组合的情况。得到的就是所有的样本中有多少对正类样本的score大于负类样本的score。然后再除以M×N。即 


公式解释:

        1、为了求的组合中正样本的score值大于负样本,如果所有的正样本score值都是大于负样本的,那么第一位与任意的进行组合score值都要大,我们取它的rank值为n,但是n-1中有M-1是正样例和正样例的组合这种是不在统计范围内的(为计算方便我们取n组,相应的不符合的有M个),所以要减掉,那么同理排在第二位的n-1,会有M-1个是不满足的,依次类推,故得到后面的公式M*(M+1)/2,我们可以验证在正样本score都大于负样本的假设下,AUC的值为1

      2、根据上面的解释,不难得出,rank的值代表的是能够产生score前大后小的这样的组合数,但是这里包含了(正,正)的情况,所以要减去这样的组(即排在它后面正例的个数),即可得到上面的公式


<think>好的,我现在需要回答用户关于AUC(Area Under the Curve)计公式的问题,特别是在机器学习中的相关应用。首先,我要确保自己正确理解AUC的概念以及它的计算方法。 用户提到了参考引用中的内容,其中提到了一个Python函数用于计二分类问题的AUC。我需要结合这个引用,但可能还需要补充更多的背景知识,让回答更完整。AUC通常与ROC曲线(Receiver Operating Characteristic curve)相关联,ROC曲线是以真阳性率(TPR)和假阳性率(FPR)为坐标的曲线,而AUC则是ROC曲线下的面积,用来衡量分类模型的性能。 接下来,我需要回忆AUC的具体计算方法。通常有两种方法:一种是通过梯形法则积分ROC曲线下的面积,另一种是通过计正负样本对的排序情况,即统计有多少正样本的预测概率高于负样本的预测概率。这种方法对应于AUC的另一个定义,即AUC等于分类器将随机选取的正例排在负例前面的概率。 公式方面,梯形积分法可能需要将ROC曲线的点按FPR排序,然后计每个梯形的面积之和。而另一种方法可以用Wilcoxon-Mann-Whitney统计量,公式大概是: $$ \text{AUC} = \frac{\sum_{i=1}^{m} \sum_{j=1}^{n} I(P_i > N_j)}{m \times n} $$ 其中,$P_i$是正样本的预测得分,$N_j$是负样本的预测得分,$I$是指示函数,当$P_i > N_j$时为1,否则为0。$m$和$n$分别是正负样本的数量。 不过,用户提供的引用中提到的Python函数可能用的是梯形积分法,或者直接调用库函数,比如sklearn中的roc_auc_score。需要确认常见的实现方式。 另外,需要注意AUC的一些性质,比如当AUC为0.5时,模型没有区分能力,相当于随机猜测;当AUC接近1时,模型表现好。 在回答中,应该先介绍AUC的定义,再给出计公式,并解释其含义。可能还需要提到如何用Python计,例如使用sklearn的metrics.auc或者roc_auc_score函数,同时注意样本排序的方法。 现在需要验证公式的正确性。例如,Wilcoxon-Mann-Whitney的公式是否正确,是否考虑了相等的情况,这时候通常会有不同的处理方式,比如当$P_i = N_j$时,指示函数可能计为0.5。这时候公式可能需要调整: $$ \text{AUC} = \frac{\sum_{i=1}^{m} \sum_{j=1}^{n} \left[ I(P_i > N_j) + 0.5 \times I(P_i = N_j) \right]}{m \times n} $$ 这样处理更准确,但可能在实际情况中,如果预测分数是连续的,相等的情况较少,所以有时可能忽略这部分。 然后,结合引用中的Python函数,如果那个函数具体如何实现的呢?例如,用户提供的引用中提到的函数可能计的是梯形积分或者基于排序的方法。如果用户给出的引用是计AUC误差指标,那么可能需要具体看函数实现,但用户没有给出具体的代码,所以可能需要一般性的解释。 因此,在回答中需要涵盖两种主要的计算方法,并指出它们的适用场景。同时,提醒用户在实际应用中使用现有的库函数以确保准确性,例如sklearn中的实现。 总结回答的结构: 1. 定义AUC及其在机器学习中的重要性。 2. 解释ROC曲线和AUC的关系。 3. 详细说明AUC的两种计算方法,并给出公式。 4. 提供Python中计AUC的示例代码(可能需要引用sklearn)。 5. 补充注意事项或常见问题。 最后,生成相关问题,如AUC的优缺点、如何解释AUC值、与其他指标的区别等。 在引用方面,用户提供的引用[^1]可能涉及到具体的函数,因此需要在回答中适当引用,例如在提到计实现时。</think>### AUC公式(机器学习) AUC(Area Under the ROC Curve)是评估二分类模型性能的重要指标,反映模型对正负样本的区分能力。其核心是通过ROC曲线下的面积量化分类效果,值域为$[0,1]$,越接近1模型性能越好。 #### 1. ROC曲线与AUC的关系 ROC曲线以**真阳性率(TPR)**和**假阳性率(FPR)**为横纵坐标: - $TPR = \frac{TP}{TP + FN}$ - $FPR = \frac{FP}{TN + FP}$ AUC是ROC曲线下的面积,表示“随机选一个正样本和一个负样本,模型对正样本的预测概率高于负样本的概率”。 --- #### 2. AUC公式 AUC可通过以下两种方法计: **方法一:积分法(梯形法则)** 将ROC曲线的点按阈值排序,计相邻点构成的梯形面积之和: $$ \text{AUC} = \sum_{i=1}^{k-1} \frac{(TPR_{i+1} + TPR_i) \cdot (FPR_{i+1} - FPR_i)}{2} $$ **方法二:排序法(Wilcoxon-Mann-Whitney统计量)** 统计正样本预测值大于负样本预测值的概率: $$ \text{AUC} = \frac{\sum_{i=1}^m \sum_{j=1}^n \left[ I(P_i > N_j) + 0.5 \cdot I(P_i = N_j) \right]}{m \cdot n} $$ 其中: - $m$:正样本数,$n$:负样本数 - $P_i$:正样本预测值,$N_j$:负样本预测值 - $I(\cdot)$:指示函数(条件满足时为1,否则为0) --- #### 3. Python实现示例 使用`sklearn`库直接计AUC: ```python from sklearn.metrics import roc_auc_score # 真实标签(0或1)和模型预测概率 y_true = [0, 1, 0, 1] y_score = [0.3, 0.6, 0.2, 0.8] auc = roc_auc_score(y_true, y_score) print("AUC:", auc) # 输出:0.875 ``` --- #### 4. 注意事项 - **AUC=0.5**:模型无区分能力(等价于随机猜测)。 - **AUC<0.5**:可能模型标签定义颠倒,需检查数据。 - **样本不平衡**:AUC对类别分布不敏感,适合评估不平衡数据[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值