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

本文介绍AUC的一般计算方式,以及AUC的近似计算方式。

文章内容仅供学习使用,如有侵权请联系作者删除。

点击蓝字关注我哦!

AUC的一般计算方式

标准方式:AUC即ROC曲线下面的面积。

在了解AUC计算之前,必须想知道ROC和混淆矩阵的定义[3]。

混淆矩阵涉及四个概念:

  • 预测类别为1的称为Positive(阳性),预测类别为0的称为Negative(阴性)。

  • 真实类别为1的称为True(真),真实类别为0的称为False(伪)。

组合起来就会得到:

进一步得到True Positive(真阳:即真实label为1,预测也为1)、False Positive(伪阳:即真实label为0,预测为1)

然后可以计算出真阳率(预测为1样本占所有真实为1的样本比例)和伪阳率(预测为1样本占所有真实为0的样本比例):

接下来说ROC:

ROC曲线的横轴是FPRate,纵轴是TPRate分类器给出预测的概率之后,我们需要设定已给阈值来把各个预测值划分为预测为正/负。即,小于等于这个阈值的所有样本预测为负,大于这个阈值的样本预测为正。

ROC计算的是每一个Threshold对应的一组True Positive Rate和False Positive Rate。知乎作者:太空来的小土豆

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.metrics import roc_curve, auc# Calculate 'True Positive Rate' and 'False Positive Rate' of each thresholdscores = np.array([ 0.95,  0.9,  1,  0.9,  0.9,  0.8,  0.8,  0.7,  0.7,  0.7,  0.7,                    0.6,  0.6,  0.6,  0.6,  0.5,  0.5,  0.5,  0.5,  0.4,  0.3,  0.3,                    0.3,  0.3,  0.2,  0.2,  0.0,  0.2,  0.1,  0.11])true_values = np.array([0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1])fpr, tpr, thresholds = roc_curve(true_values, scores, pos_label=1)d = {'Threshold': thresholds, 'True Positive Rate': tpr, 'False Positive Rate': fpr}metric_table = pd.DataFrame(d, columns = ['Threshold', 'True Positive Rate', 'False Positive Rate'])metric_table

可以看到,这里的threshold就是刚刚样本预测值中的那些唯一值,即:set(scores)

接下来绘制roc曲线

# Plot ROC Curveroc_auc = auc(fpr, tpr)plt.figure()plt.plot(fpr, tpr, color='red',         lw=2, marker='o',         label='ROC curve (area = %0.2f)' % roc_auc)x = [0, 1]y = [0, 1]plt.plot(x, y, color='black', lw=2, linestyle='--')plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('ROC Curve')plt.legend()plt.grid(alpha=0.2)plt.show()

AUC就是ROC曲线下的面积,在这个例子中就算出来就是0.63.

AUC的近似计算

AUC有一个近似计算的方法,大概的思想就是:AUC的含义是模型预测正确大于预测错误的概率,从概率的角度出发,统计给出的数据(好坏标签和预测概率或分数)中预测正确比预测错误大的概率是多大[2]。这里虽然是近似计算,但经过验证计算结果跟实际差别非常小,研究者验证的差别是千分位的级别,可以说非常准确了[2]。

这个公式具体是什么含义呢?

  • rank_i:表示第i条样本的序号。(概率得分从小到大排,排在第rank个位置)

  • M,N: 分别是正样本的个数和负样本的个数

  • \SUM_{i \in positiveClass} 表示只把正样本的序号加起来。

举个例子[1]:

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

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

而我们直接用刚刚基于roc曲线下面积的计算方式,结果是相同的:

当然,我们需要注意出现得分一致的情况。

下面举一个例子说明[1]:

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

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

由于只考虑正样本的rank值:

对于正样本A,其rank值为7

对于正样本B,其rank值为6

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

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

最后我们得到:0.833333

而我们直接用刚刚基于roc曲线下面积的计算方式,结果是相同的:

参考文献:

[1]  AUC的计算方法

https://blog.csdn.net/qq_22238533/article/details/78666436

[2]  AUC,ROC快速计算——Python代码

https://blog.csdn.net/sinat_30715661/article/details/89160969

[3] 如何理解机器学习和统计中的AUC?

https://www.zhihu.com/question/39840928

[4] AUC计算方法总结

https://blog.csdn.net/pzy20062141/article/details/48711355

AUC值越大_AUC的一般计算和近似计算方式相关推荐

  1. AUC值越大_AUC,ROC 讲解

    面试的时候,一句话说明AUC的本质和计算规则: AUC:一个正例,一个负例,预测为正的概率值比预测为负的概率值还要大的可能性. 所以根据定义:我们最直观的有两种计算AUC的方法 1:绘制ROC曲线,R ...

  2. AUC值越大_模型评价——准确率、精确率与召回率与F值、宏平均与微平均、ROC曲线与AUC值...

    在上一篇文章中(baiziyu:模型评价--训练误差与测试误差.过拟合与欠拟合.混淆矩阵)主要介绍了模型评价涉及的基本概念,本节给出一些常用的评价指标.这些指标大致可以分为三类,第一大类是普通的准确率 ...

  3. AUC值越大_一文看懂ROC、AUC

    评测指标是衡量一个算法是否出色的一个重要部分,好的指标能让我们这些炼丹学徒知道,练出来的丹药是否有效果.那么在机器学习中有哪些值得一探究竟的指标呢?本文就PR图,ROC.AUC.mAP这4个方面进行详 ...

  4. AUC值越大_「机器学习速成」分类,评估指标(TP、FP、TN、FN),ROC曲线和AUC

    大家好,今天我们学习[机器学习速成]之 分类,评估指标(TP.FP.TN.FN),ROC曲线和AUC. 本节介绍了如何使用逻辑回归来执行分类任务, 并探讨了如何评估分类模型的有效性. 我们 马上学三点 ...

  5. 交叉熵损失函数的通用性(为什么深度学习DL普遍用它):预测输出与 y 差得越多,L 的值越大,也就是说对当前模型的 “ 惩罚 ” 越大,而且是非线性增大是一种类似指数增长的级别,结论:它对结果有引导性

    交叉熵损失函数的通用性(为什么深度学习DL普遍用它):预测输出与 y 差得越多,L 的值越大,也就是说对当前模型的 " 惩罚 " 越大,而且是非线性增大是一种类似指数增长的级别,结 ...

  6. Gamma值越大,图像越暗

    何为Gamma校正:http://blog.csdn.net/lichengyu/article/details/8457425

  7. ROC曲线和AUC值的计算

    转载自:https://zhuanlan.zhihu.com/p/25212301,本文只做个人记录学习使用,版权归原作者所有. 1.混淆矩阵 混淆矩阵如下图所示,分别用0和1代表负样本和正样本.FP ...

  8. 机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率

    北京 | 高性能计算之GPU CUDA课程11月24-26日3天密集学习 快速带你晋级阅读全文> 在分类任务中,人们总是喜欢基于错误率来衡量分类器任务的成功程度.错误率指的是在所有测试样例中错分 ...

  9. 一文详尽混淆矩阵、准确率、精确率、召回率、F1值、P-R 曲线、ROC 曲线、AUC 值、Micro-F1 和 Macro-F1

    文章目录 二分类的评价指标 一.混淆矩阵与 TP.TN.FP.FN 二.准确率.精确率.召回率.F1值 三.P-R 曲线 四.ROC 曲线.AUC 值 五.P-R曲线和ROC曲线有什么区别,如何选择? ...

最新文章

  1. 1-1 分配内存资源给容器和POD
  2. android 序列化_Android高级架构进阶之数据传输与序列化
  3. 怀化学院计算机科学张显老师,怀化学院:计算机“华山论剑”获佳绩
  4. Android NDK编程小试---实现java和c语言的互掉
  5. android 指定语言的资源,Android国际化多语言切换
  6. sqoop从mysql导入hdfs_sqoop 从mysql导入数据到hdfs、hive
  7. springMVC 控制层添加异步线程
  8. Elasticsearch(六) java代码操作Es进行高级查询match、match_all
  9. Unity枚举和字符串的相互转换
  10. Elasticsearch查询速度为什么这么快?
  11. hadoop2.6.2分布式环境搭建
  12. 运维的日常:如果回到18岁,你还会选择运维行业么?
  13. 简单图形的输入输出练习
  14. python sin_Python入门之三角函数sin()函数实例详解
  15. go vender 的环境搭建和使用
  16. 说说大型网站可伸缩性架构的设计原理
  17. Java中创建对象有哪几种方式,Java 中创建对象的4种方式--Java学习网
  18. android实现异网双卡双待识别运营商网络
  19. 怎么把照片变年轻?这两个照片变年轻小妙招教给你
  20. linux下,Telnet连接输入正确的用户名和密码后,却还一直提示输用户名和密码,解决方案。

热门文章

  1. CSDN 正式发布《开发者“湘遇”长沙》报告,为什么一线城市半数开发者向往长沙
  2. 一文看懂单元测试中的打桩
  3. nginx rewrite与proxy_pass详解
  4. java可以写a手机app吗_‎JAVA程序员自学编程 a l’App Store
  5. 计算机机房管理系统的设计与实现,计算机机房管理系统的设计与实现
  6. 增加用户粘性最有效的方法有哪些?
  7. Better-Scroll的封装
  8. TinyOS、NesC程序开发经验谈
  9. 结构体---点坐标结构体
  10. Intellij Idea 将Java项目打包成jar