分类器的ROC曲线及相关指标(ROC、AUC、ACC)详解

关于ROC曲线有几篇老博客。有一篇是一位博士写的,不过不知道为什么,那篇文章老是有迷之错误,从13年开始,一直订正到17年,依旧存在错误,如举例有问题、概念混淆(因为其文章包含了太多的概念,导致文法上的指代不清)。

[转载请注明来源于此:[****]身披白袍's博客]

>ROC(Receiver Operating Characteristic Curve),即受试者工作特征曲线

ROC曲线是用来验证一个分类器(二分)模型的性能的。其工作原理是,给出一个模型,输入已知正负类的一组数据,并通过对比模型对该组数据进行的预测,衡量这个模型的性能。

注意,“测试数据”的正负类是已知的,我们需要的是判断模型预测数据的阳性、阴性是否符合“测试数据”的事实

在这个前提下,整个ROC曲线的内容如下图:


分类器的ROC曲线及相关指标(ROC、AUC、ACC)详解


>ROC曲线是怎么画的呢?

  1. 给定一个初始阈值(一半是从0%开始)
  2. 根据分类结果画上图中第一个表格,然后根据上面的式子算出TPR和FPR。由TPR和FPR可以确定一个点,在图中画出;
  3. 给一个新的阈值(如每次加1%),并重复步骤2、3,直到阈值取到100%。
  4. 若干个点最后组成了ROC曲线。


>关于ROC曲线有几个小点可以关注一下:

  • 显然,FPR=1-TNR。1-TNR也就是其他文章中说的“1-特异性”指标;该指标的值越小越好。
  • TPR的值越大越好;
  • 最大的阈值,在不考虑权重的情况下,应当是使得TPR最大且“1-特异性”指标相对较小的值;
  • ROC曲线的图像总应该是在y=kx之上的(图中灰线),k取非0正值;
  • AUC的值总是大于0.5,小于1;
  • 可以通过约登指数(TPR+1-FPR)取得最大时的阈值来确定一个分类器合适的阈值;
  • ACC被称作“准确率”,其含义为,对所有样本,被准确判断为阳性和阴性所占的比例。ACC=(TP+TN)/所有数据的个数=(TP+TN)/(TP+TN+FP+FN);
  • TPR在医学上被称作“确诊率”,那是因为医学判断一个人是否得病,依据的是是否检出病征(而一个人默认为阴性病征),只有TPR有受试的意义;ACC与“确诊率”不是一个东西;
  • 一般来说,AUC在0.9以上时,该分类器模型具有价值;


>ROC、AUC、ACC的区别

有人可能要问,有了ROC为什么要AUC和ACC?


1.先从ACC解释起:

准确率(Accuracy):ACC=(TP+TN)/(TP+TN+FP+FN)

反映的是分类器准确识别真阳性和假阴性的比率。看起来似乎这个指标已经能反映一个分类器的性能了,但我们应当想起一个很重的前提:这个ACC是只针对目前输入的这一组数据做出的判断。这就很容易因为数据偏斜造成模型的“测不准”。

举个例子:我输入了一组数据,这组数据,很不幸,是非常极端的。10000个数据元里有9900个是负类,只有100个是正类。假如这个模型对负类的预测很准确,但对正类的预测十分不准,由于ACC=(TP+TN)/(TP+TN+FP+FN),TP和FP的值在这组数据中都非常小,因此这时候ACC公式约等于TN/(TN+FN),由于对负类的预测很准,此时ACC的值也很大;但对于另外一组数据,比如9000个正类,1000个负类,这时候由于对正类的预测很糟糕,会出现大面积的假阳性预测,因此ACC的值又变得很低。

综上,ACC没办法较好地脱离测试数据对模型进行评价,这也就是我们为什么要用ROC的原因。

2.AUC是什么

AUC(Area Under Curve),是对ROC曲线的量化指标。

一个合适的分类器,要求做到TPR较高而FPR较小,体现在曲线上,就是在相同的FPR时,TPR越大的越好:

分类器的ROC曲线及相关指标(ROC、AUC、ACC)详解

如上图中,红线对应的分类器的性能就好过蓝线对应的分类器。

但对于人类来说,通过人眼识别自然很简单。但对于计算机呢?而且,某些情况下,ROC曲线并不一定是完全光滑的(由于阈值取值的问题等),有可能某一个时刻红线超过了蓝线而另一个时刻蓝线超过了红线,这就很难进行判断到底哪个分类器性能好。

所以我们用AUC进行评价。AUC的值,等于曲线与FPR轴线形成的面积。AUC的值越大越好,其取值范围为(0.5,1)。