ROC(Receiver Operating Characteristic)
曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,对两者的简单介绍见[2]。
这篇博文简单介绍ROC和AUC的特点,以及更为深入地,讨论如何作出ROC曲线图以及计算AUC。

# ROC曲线
需要提前说明的是,我们这里只讨论二值分类器。
对于分类器,或者说分类算法,评价指标主要有precision,recall,F-score,以及我们今天要讨论的ROC和AUC。下图是一个ROC曲线的示例。

正如我们在这个ROC曲线的示例图中看到的那样:
横坐标:false positive rate(FPR),
纵坐标:true positive rate(TPR)。
下图中详细说明了FPR和TPR是如何定义的。

TP:真事儿被判定为真。

TN:假事儿被判定为假

ROC曲线上的坐标是:

(误伤概率,正伤概率)=(,

所谓的ROC就是把混淆矩阵的第一行画在图上
接下来我们考虑ROC曲线图中的四个点和一条线。

第一个点,(0,1),即FPR=0, TPR=1,这意味着FN(false negative)=0,并且FP(false positive)=0。Wow,这是一个完美的分类器,它将所有的样本都正确分类。

第二个点,(1,0),即FPR=1,TPR=0,类似地分析可以发现这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。

第三个点,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,可以发现该分类器预测所有的样本都为负样本(negative)。

第四个点(1,1),分类器实际上预测所有的样本都为正样本。经过以上的分析,我们可以断言,ROC曲线越接近左上角,该分类器的性能越好。

下面考虑ROC曲线图中的虚线y=x上的点。这条对角线上的点其实表示的是一个采用随机猜测策略的分类器的结果,例如(0.5,0.5),表示该分类器随机对于一半的样本猜测其为正样本,另外一半的样本为负样本。

# 如何画ROC曲线
对于一个特定的分类器和测试数据集,显然只能得到一个分类结果,即一组FPR和TPR结果,而要得到一个曲线,我们实际上需要一系列FPR和TPR的值,这又是如何得到的呢?

我们先来看一下[3]上对ROC曲线的定义:

> In signal detection theory, a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.

问题在于“as its discrimination threashold is varied”。如何理解这里的“discrimination threashold”呢?我们忽略了分类器的一个重要功能“概率输出”,即表示分类器认为某个样本具有多大的概率属于正样本(或负样本)。
通过更深入地了解各个分类器的内部机理,我们总能想办法得到一种概率输出。通常来说,是将一个实数范围通过某个变换映射到(0,1)区间。

假如我们已经得到了所有样本的概率输出(属于正样本的概率),现在的问题是如何改变“discrimination threashold”?
我们根据每个测试样本属于正样本的概率值从大到小排序。下图是一个示例,图中共有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曲线的结果如下图:

当我们将threshold设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点。
将这些(FPR,TPR)对连接起来,就得到了ROC曲线。
当threshold取值越多,ROC曲线越平滑。

其实,我们并不一定要得到每个测试样本是正样本的概率值,只要得到这个分类器对该测试样本的“评分值”即可(评分值并不一定在(0,1)区间)。
评分越高,表示分类器越肯定地认为这个测试样本是正样本,而且同时使用各个评分值作为threshold。
我认为将评分值转化为概率更易于理解一些。

# AUC值的计算
AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

在了解了ROC曲线的构造过程后,编写代码实现并不是一件困难的事情。
相比自己编写代码,有时候阅读其他人的代码收获更多,当然过程也更痛苦些。在此推荐[4]中关于计算AUC的代码[5]

# 为什么使用ROC曲线
既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。下图是ROC曲线和Precision-Recall曲线的对比:

在上图中:
(a)和(c)为ROC曲线,
(b)和(d)为Precision-Recall曲线。
(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c)和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。

说明,文中除了第一张图来自Wikipedia外,其他的图都来自论[6]截图.

图片来源:http://en.wikipedia.org/wiki/File:Roccurves.png
这种映射不一定都是可靠的,即你不一定真的得到了某个样本是正样本的概率。
注意这里使用了“Score”,而不是概率,我们暂且可以认为“Score”值就是是正样本的概率。

其他引用的链接:
维基百科中对ROC的介绍: http://en.wikipedia.org/wiki/Receiver_operating_characteristic
ROC曲线及AUC评价指标 by 冒泡的崔:http://bubblexc.com/y2011/148/
Davis, J., & Goadrich, M. (2006, June). The relationship between Precision-Recall and ROC curves. In Proceedings of the 23rd international conference on Machine learning (pp. 233-240). ACM.

Reference:
[1]http://alexkong.net/2013/06/introduction-to-auc-and-roc/
[2]http://bubblexc.com/y2011/148/
[3]http://en.wikipedia.org/wiki/Receiver_operating_characteristic
[4]http://scikit-learn.org/stable/
[5]https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/metrics/metrics.py#L479
[6]Fawcett, T. (2006). An introduction to ROC analysis. Pattern recognition letters, 27(8), 861-874

ROC和AUC介绍以及如何计算AUC(转载+自己重新排版整理)相关推荐

  1. ROC和AUC介绍以及如何计算AUC

    转自: http://alexkong.net/2013/06/introduction-to-auc-and-roc/ ROC(Receiver Operating Characteristic)曲 ...

  2. matlab计算auc,ROC和AUC介绍以及如何计算AUC

    ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,对两者的简单介绍见这里.这篇博文简单介绍 ...

  3. auc评测指标如何计算?其他的评测指标有吗?假设阙值为0.5,如何计算这个点?

    目录 混淆矩阵(Confusion matrix) ROC曲线 AUC(Area under the ROC curve) AUC如何求解 混淆矩阵(Confusion matrix) 混淆矩阵是理解 ...

  4. AUC是什么?AUC的的意义是什么?AUC的判断分类器优劣标准是什么?AUC如何计算?

    AUC是什么?AUC的的意义是什么?AUC的判断分类器优劣标准是什么?AUC如何计算? metrics.roc_auc_score metrics.roc_curve AUC就是曲线下面积,在比较不同 ...

  5. ROC曲线的AUC(以及其他评价指标的简介)知识整理

    相关评价指标在这片文章里有很好介绍 信息检索(IR)的评价指标介绍 - 准确率.召回率.F1.mAP.ROC.AUC:http://blog.csdn.net/marising/article/det ...

  6. 偏AUC(partial AUC)或者部分AUC是什么?R语言使用pROC包绘制ROC曲线并定义偏AUC(partial AUC):分别聚焦特异度、敏感度角度

    偏AUC(partial AUC)或者部分AUC是什么?R语言使用pROC包绘制ROC曲线并定义偏AUC(partial AUC):分别聚焦特异度.敏感度角度 目录

  7. python计算auc值_Python计算AUC

    AUC(Area under curve)是机器学习常用的二分类评测手段,直接含义是ROC曲线下的面积.另一种解释是:随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进 ...

  8. 深度学习auc_test auc 和测试集auc 差距非常大

    因为以前的工作经历大部分是在做深度学习,大部分看test auc,顺带看一下train auc,只要测试集和训练集auc差距不是特别特别大,不是特别关注,最近我同事问了我,他的测试集和训练集auc 差 ...

  9. ROC曲线及如何计算AUC

    AUC的全名是Area Under Curve,就是ROC曲线下的面积.因此,在介绍AUC之前,先介绍下ROC. ROC ROC的全称是"受试者工作特征"(Receiver  Op ...

最新文章

  1. 学习笔记(十八)——MongoDB(CRUD)与Python交互
  2. 在Ubuntu系统中安装Docker
  3. 小程序api 分享scene_微信小程序 插件调用API的限制
  4. 命令:服务器与CST时间误差8小时的修复方法——timedatectl
  5. [2018.08.09 T1] 数学题
  6. Moq 和 RhinoMocks
  7. 10.第十一章.风险管理
  8. 【扫盲系列】网络术语
  9. C语言中关于中文字符的存储及相关探索
  10. [hihoCoder太阁最新面经算法竞赛1] 穿越禁区 (DFS,并查集,计算几何) 难题
  11. DataPipeline王睿:业务异常实时自动化检测 — 基于人工智能的系统实战
  12. 前端代码 review 流程规范
  13. 超快自旋电子学为电子信息新材料开辟了道路
  14. SpringBoot框架的基于java的疫情期间网课管理系统
  15. android4.4广播,Android4.4 framework分析——广播的注册(BroadcastReceiver)和发送(sendbroadcast)过程分析...
  16. mac下用户用户组命令行操作
  17. 哥大五年CV岁月:只有开心,才能做出有影响力的工作
  18. What 引导的三种名词性从句
  19. 基于Django的web开发(一)
  20. RK3399驱动开发 | 14 - AP6255 SDIO WiFi 调试(基于linux5.4.32内核)

热门文章

  1. Ext.Net学习笔记10:Ext.Net ComboBox用法
  2. POJ 计算几何入门题目推荐
  3. 《WebGIS开发实践手册》2.2 ArcIMS服务器组件[1]
  4. 带宽测量:带宽测量工具下载
  5. js判断最后一个字符是不是指定字符_结合简单的 JS 就可以让 CSS 也能做搜索
  6. 配置React项目的运行环境
  7. 如何把HTML转换成动图,html5实现图片转圈的动画效果——让页面动起来
  8. git永久保存账号密码
  9. vue全局使用electron
  10. 小程序获取列表的下标