博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ROC曲线与AUC值及其铺垫
阅读量:7162 次
发布时间:2019-06-29

本文共 3398 字,大约阅读时间需要 11 分钟。

简单介绍

ROC曲线Receiver Operating Characteristic curve(受试者工作特征曲线)

AUC值 Area Under Curve score (曲线下面积值),也就是ROC曲线之下与坐标轴围成的面积。
这两个指标一般作为衡量二分类器的度量,为什么要有这个测试指标,源自于一种二分类器的思考。如果我们有一件事情的为1的概率为99%,0的概率为1%,则如果我们不经过处理,全将结果写成1,我们也能够得到99%的准确率,而这个分类器给我一点指导意义都没有。可见准确率(accuracy)并不能说明什么问题。
我们继准确率之后,对于二分类器的性能度量经过了一系列的改进和变化。我今天想要介绍的是现在使用的比较多的一种衡量方式:ROC曲线与AUC值。不过还得从最原始的方式谈起。

经典的二分类器性能度量

我们把思维拨回二分类器思想刚产生的时候,人们是如何对它进行评定的。

Precision与Recall

我们将二分类器的所有可能取值,做一个方格图如下:

二分类取值原理图(图片截自coursera)

这其中,

  • TP —— True Positive (真正, TP)被模型预测为正的正样本(原来为正预测为正)
  • TN —— True Negative(真负 , TN)被模型预测为负的负样本(原来为负预测为负)
  • FP ——False Positive (假正, FP)被模型预测为正的负样本(原来为负预测为正)
  • FN—— False Negative(假负 , FN)被模型预测为负的正样本 (原来为正预测为负)

我们由这几个值的物理意义知: TP+FP +FN+TN =样本总个数

准确率accuracy不太起作用的时候,我们便顺应自己的需求,对分类器的整体性能有个考量。这时候我们就大致将问题分成两种:查准问题和查全问题。

查准问题,也就是一定要准。比如选择西瓜时,宁愿漏掉不少好瓜,也要挑最有把握的那些,这样挑出来的瓜中间好瓜的比例高。查准问题中优化目标就是已经预测的值中正确的比例
查全问题,也就是一定要全。比如在选择西瓜时,宁愿选出一堆坏瓜,也要把一车瓜中的好瓜尽量挑全了。这样挑出来的瓜中好瓜数量占原来车子中好瓜比例较高。查全问题的优化目标就是将实际值中的正值尽可能预测覆盖到。
于是我们便有了两个参数Precision(查准率或叫准确率)Recall(查全率或叫召回率),分别对应这两种问题的优化目标,公式如下:

Precision与Recall公式

我们仔细琢磨一下这两个公式就会发现,precision是预测正确的正值占所有预测为正之比,recall是预测正确的正值占所有实际正值之比。

F-1 score

Precision与recall分别对应查准问题与查全问题,然而常常二者不能同时提高,所以对于实际复杂问题处理很有偏见,于是我们引入F1-score来近似帮助我们解决实际问题。

它是采用一种数学上的糅合方法:

常用数学糅合方法

这里面P就代表PrecisionR就代表Recall,而我们正常使用的F1-score是这个a=1的情况(F后缀是1),这就有点儿类似并联的电阻值计算,最后得到的F-1 score完整的计算方式是:

F-1 score计算方法

性能指标全家福

为了方便大家理解,我把这几个经典的度量指标合在一张图上给大家看看:

Precasion、Recall与F-1 score (图片来自coursera)

ROC曲线

进入主题,我们来了解一下今天的重点内容,这两个指标。

含义:

ROC曲线receiver operating characteristic curve(受试者工作特征曲线)

这个名字其实不太容易理解,来看看这张图:

ROC曲线示例图

ROC曲线示例图分析(图片来自网络)
这个图像就是ROC曲线了。图像的横轴是False Positive rate值(不是FP值),也就是实际为负并且预测错误的个数占总的负值的比例;图像的纵轴是True Positive rate值(不是TP值),也就是实际为正值并且预测正确的个数占总的正值的比例。公式如下:

ROC曲线横纵轴意义

其中FP,TP,N,P的值参考上面那张表。

我们再来看看ROC曲线中的“四点一线”

  • 第一个点,(0,1),即FPR=0, TPR=1,这意味着FN(false negative)=0,并且FP(false positive)=0。这是一个完美的分类器,它将所有的样本都正确分类。
  • 第二个点,(1,0),即FPR=1,TPR=0,类似地分析可以发现这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。
  • 第三个点,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,可以发现该分类器预测所有的样本都为负样本(negative)。
  • 第四个点(1,1),分类器实际上预测所有的样本都为正样本。

对于ROC曲线,我们可以这样理解,对于二分类问题,曲线的每一个点都代表一个阈值,分类器给每个样本一个得分,得分大于阈值的我们认为是正样本,小于阈值的我们认为是负样本。

举个图中的例子

在上面那张ROC曲线图中,我们随便取一个点比如(0.5,0.7),那么也就说明了这个分类器在FP/N = 0.5的时候,也就是实际值为负,而我预测错了预测成正的数量占整个实际值为负的数量的0.5。这句话看起来很拗口,其实也就是对于负值的预测正确率为1-0.5=0.5,TP/P=0.7,同理,就是对于正值的预测正确率为0.7。所以说,ROC曲线中的每一个点都代表一组测试数据中,对于正值和负值的预测正确率分别的考量

ROC曲线图的几个性质

(性质1)若学习器A的ROC曲线将另外一个学习器B的曲线完全包住,则A的性能一定比B好,否则若二者曲线有交叉,则可以较为合理的认为ROC曲线越接近左上角,也就是AUC值越大,整个分类器的性能越好。

有了上面的基础,这句话就很好理解了。

ROC曲线中每一个点代表的是在那一组测试中,对于正值和负值的预测正确率分别的考量。如果A的ROC曲线完全包住B的话,则如下图所示:

ROC曲线包围示意图

此图中这条实线就完全包住了虚线,我们来看,对于实线上的任意一点,我们沿着黑线,也就是同负值预测正确率的情况下,黑点的正值预测正确率比红点高。而沿着红线,也就是同正值预测正确率的情况下,我们就会知道,黑点的FP rate比蓝点小。我们知道,负值预测正确率 = 1- FP rate,所以黑点的负值预测正确率比蓝点高。所以综合说来,无论从正值还是负值,实线的性能都比虚线好。

而对于并不是完全包住,比如这样:

未完全包围ROC曲线示意图(图片来自网络)
那我们得从实际情况对那种参数更加偏好来考虑,但是一般我们就考察ROC围成的面积,也就是AUC值。哪个AUC值大,哪个分类器就好。

(性质2)AUC值等于0.5时,我们可以认为分类器不起作用。AUC小于0.5时,实际情况基本不会出现,不符合真实情况。

这个也好理解,因为当AUC值等于0.5时候,我们基本可以将这个二分类器当作一个随机分类器。通俗的说跟抛硬币决定的效果是一样的,就没有作用。小于0.5的还不如抛硬币,实际情况很少出现。

AUC值

AUC值 Area Under Curve (曲线下面积),也就是ROC曲线之下与坐标轴围成的面积。

我们很容易就会看出来,AUC其实是ROC 曲线的积分,但是这样很不直观,也不能感性理解,其实AUC确实是有物理意义的。AUC是指 随机给定一个正样本和一个负样本,分类器输出的正样本的概率比分类器出去负样本的概率大的可能性。
我在知乎上看到了一个很好玩的感性认识:

这也就是AUC实际的计算公式了。

写在最后:

这里面所有的值用的单位是Score,并不是概率,但是我为了方便大家理解,就用概率来代替。在我粗浅的认知里面,还没有发现有什么问题,愿大家用严谨的视角来看待这个问题。


参考目录:

周志华--《机器学习》 2016年1月第1版

知乎问题《机器学习和统计里面的auc怎么理解?》@小小丘:
知乎问题《精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么?》:

转载地址:http://iojwm.baihongyu.com/

你可能感兴趣的文章
drawRect方法
查看>>
Git快速入门和常用命令
查看>>
C#数组的声明
查看>>
Python转义字符
查看>>
Android:Layout_weight的深刻理解
查看>>
Nginx+uWSGI+Django+Python在Linux上的部署
查看>>
浅谈ASP.NET的内部机制(一)
查看>>
已经是GBK编码的Eclipse写的项目 如何转到UTF8而不乱码
查看>>
js如何终止程序
查看>>
Django概述
查看>>
服务端开发新框架
查看>>
Spring——环境搭建步骤
查看>>
微信小程序之给项目设置id后提示不在合法域名列别中
查看>>
json
查看>>
sublime text 批量删除空白行
查看>>
单例、工厂、观察者、策略模式
查看>>
Mybatis中注解@MapKey的使用
查看>>
Linux shell编程与实践(十)之shell编程与php脚本语言的组合
查看>>
metaclass(元类)
查看>>
AI五子棋需求规格说明书
查看>>