AUC的计算方法

AUC的计算方法摘要 在机器学习的分类任务中 我们常用许多的指标 诸如召回率 Recall 准确率 Precision F1 值 AUC 等 那么 如果如果手动计算 AUC 应该要怎么计算呢 相信大家很多时候都是用写好的库直接计算 可能对 AUC 计算不太了解 下面这篇文章就简单的概述一下 AUC 的计算方法 注 本文的重点其实不在于阐述什么是 AUC 因为网上关于这方面的文章实在太多了 但是对于 AUC 的计算的文

摘要:

在机器学习的分类任务中,我们常用许多的指标,诸如召回率(Recall)、准确率(Precision)、F1值、AUC等。
那么,如果手动计算AUC应该要怎么计算呢?相信大家很多时候都是用写好的库直接计算,可能对AUC计算不太了解,下面这篇文章就简单的概述一下AUC的计算方法。
(注:本文的重点其实不在于阐述什么是AUC。因为网上关于这方面的文章实在太多了。但是对于AUC的计算的文章相对来说少一些)





1.什么是AUC?

相信这个问题很多玩家都已经明白了,简单的概括一下,AUC(are under curve)是一个模型的评价指标,用于分类任务。
那么这个指标代表什么呢?这个指标想表达的含义,简单来说其实就是随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率。
AUC的计算方法







具体关于AUC含义的分析推荐以下回答:



AUC如何理解?





2.如何计算AUC?

计算AUC时,推荐2个方法。
方法一:
在有M个正样本,N个负样本的数据集里。一共有M*N对样本(一对样本即,一个正样本与一个负样本)。统计这M*N对样本里,正样本的预测概率大于负样本的预测概率的个数。
AUC的计算方法,其中, AUC的计算方法







这样说可能有点抽象,我举一个例子便能够明白。



ID label pro
A 0 0.1
B 0 0.4
C 1 0.35
D 1 0.8



假设有4条样本。2个正样本,2个负样本,那么M*N=4。即总共有4个样本对。分别是:
(D,B),(D,A),(C,B),(C,A)。
在(D,B)样本对中,正样本D预测的概率大于负样本B预测的概率(也就是D的得分比B高),记为1
同理,对于(C,B)。正样本C预测的概率小于负样本C预测的概率,记为0.
最后可以算得,总共有3个符合正样本得分高于负样本得分,故最后的AUC为
AUC的计算方法



在这个案例里,没有出现得分一致的情况,假如出现得分一致的时候,例如:



ID label pro
A 0 0.1
B 0 0.4
C 1 0.4
D 1 0.8

同样本是4个样本对,对于样本对(C,B)其I值为0.5。


最后的AUC为
AUC的计算方法









方法二:
另外一个方法就是利用下面的公式:
AUC的计算方法





这个公式看起来有点吓人,首先解释一下每一个符号的意思:
公式的含义见: 公式解释



AUC的计算方法,代表第i条样本的序号。(概率得分从小到大排,排在第rank个位置)



AUC的计算方法分别是正样本的个数和负样本的个数



AUC的计算方法只把正样本的序号加起来。





同样本地,我们用上面的例子。



ID label pro
A 0 0.1
B 0 0.4
C 1 0.35
D 1 0.8

 将这个例子排序。按概率排序后得到:



ID label pro rank
A 0 0.1 1
C 1 0.35 2
B 0 0.4 3
D 1 0.8 4

按照上面的公式,只把正样本的序号加起来也就是只把样本C,D的rank值加起来后减去一个常数项 AUC的计算方法







即:
AUC的计算方法,这个答案和我们上面所计算的是一样的。



这个时候,我们有个问题,假如出现得分一致的情况怎么办?下面举一个例子说明:





ID label pro
A 1 0.8
B 1 0.7
C 0 0.5
D 0 0.5
E 1 0.5
F 1 0.5
G 0 0.3

在这个例子中,我们有4个取值概率为0.5,而且既有正样本也有负样本的情况。计算的时候,其实原则就是相等得分的rank取平均值。具体来说如下:


先排序:
ID label pro rank
G 0 0.3 1
F 1 0.5 2
E 1 0.5 3
D 0 0.5 4
C 0 0.5 5
B 1 0.7 6
A 1 0.8 7

这里需要注意的是:相等概率得分的样本,无论正负,谁在前,谁在后无所谓。



由于只考虑正样本的rank值:
对于正样本A,其rank值为7
对于正样本B,其rank值为6



对于正样本E,其rank值为(5+4+3+2)/4
对于正样本F,其rank值为(5+4+3+2)/4



最后我们得到:
AUC的计算方法







3.最后的最后,如何用程序验证?

为了方便,我们使用sk-learn里面自带的库来简单的验证一下我们的例子。



AUC的计算方法



其python的代码

import numpy as np from sklearn.metrics import roc_auc_score y_true = np.array([1,1,0,0,1,1,0]) y_scores = np.array([0.8,0.7,0.5,0.5,0.5,0.5,0.3]) print "y_true is ",y_true print "y_scores is ",y_scores print "AUC is",roc_auc_score(y_true, y_scores) y_true = np.array([0, 0, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8]) print "y_true is ",y_true print "y_scores is ",y_scores print "AUC is ",roc_auc_score(y_true, y_scores)









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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175715.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午11:35
下一篇 2026年3月26日 下午11:36


相关推荐

  • mysql日期时间简单查询

    mysql日期时间简单查询mysql日期时间简单查询

    2022年4月23日
    52
  • 超百个免费api接口,分享给你「建议收藏」

    超百个免费api接口,分享给你「建议收藏」API(应用程序编程接口)API(ApplicationProgrammingInterface,应用程序接口)是一些预先定义的函数,或指软件系统不…

    2022年5月10日
    45
  • KNN 回归算法_DTW算法

    KNN 回归算法_DTW算法KNN算法也能够用于回归预测。KNN算法用于分类的方法如下:首先,对于一个新来的预测实例,我们在训练集上寻找它的最相近的K个近邻;然后,采用投票法将它分到这K个邻居中的最多的那个类。但是,怎么将KNN算法用于回归呢?其实大致的步骤是一样的,也是对新来的预测实例寻找K近邻,然后对这K个样本的目标值取均值即可作为新样本的预测值。…

    2022年8月21日
    16
  • Java编译时注解自动生成代码[通俗易懂]

    Java编译时注解自动生成代码[通俗易懂]在开始之前,我们首先申明一个非常重要的问题:我们并不讨论那些在运行时(Runtime)通过反射机制运行处理的注解,而是讨论在编译时(Compiletime)处理的注解。注解处理器是一个在javac中的,用来编译时扫描和处理的注解的工具。可以为特定的注解,注册自己的注解处理器。一个注解的注解处理器,以Java代码(或者编译过的字节码)作为输入,生成文件(通常是.java文件)作为输出。可以生成Java代码,这些生成的Java代码是在生成的.java文件中,所以不能修改已经存在的Java类,例如向已有的类中

    2022年5月27日
    284
  • Pycharm导入matplotlib失败的解决办法

    Pycharm导入matplotlib失败的解决办法这个问题折磨了一天 终于解决了 我用 Anaconda 下载的 matplotlib 包 然后用 pycharm 进行代码编写 但是无论如何都报错 出现 from importmultia 导入 dll 失败的错误 翻了很多资料 终于解决了 解决办法 在 Anaconda 中下载的 matplotlib 包不能导入 要在 pycharm 中下载 具体步骤如下 nbsp

    2026年3月27日
    2
  • 埃隆·马斯克的X计划在Grok聊天机器人的回复中引入广告,以缓解收入压力

    埃隆·马斯克的X计划在Grok聊天机器人的回复中引入广告,以缓解收入压力

    2026年3月15日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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