ROC曲线 AUC值

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/u010608296/article/details/102650944

全面了解ROC曲线

一. 初识ROC曲线

1. ROC的前世今生:

ROC的全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,  首先是由二战中的电子工程师和雷达工程师发明的,用来侦测战场上的敌军载具(飞机、船舰),也就是信号检测理论。之后很快就被引入了心理学来进行信号的知觉检测。此后被引入机器学习领域,用来评判分类、检测结果的好坏。因此,ROC曲线是非常重要和常见的统计分析方法。

2. “ROC 曲线”思路:

根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值(TPR、FPR),分别以它们为横、纵坐标作图。

3. AUC (Area under Curve)

ROC曲线下的面积,介于0.1和1之间,作为数值可以直观的评价分类器的好坏,值越大越好。

4. “混淆矩阵”:

对于二分类问题,可将样本根据其真实类别学习器预测类别的组合划分为        

TP(true positive)、FP(false positive)、TN(true negative)、FN(false negative)四种情况,TP+FP+TN+FN=样本总数。

https://upload.plob.ybzhao.com/wp-content/uploads/2018/03/1520544674-4689-UPUkzibUSTjICbB7q5oicxFOFdRw.jpg

(1)真阳性(True Positive,TP): 检测不健康,且实际不健康;正确肯定的匹配数目;

(2)假阳性(False Positive,FP):检测不健康,但实际健康;误报,给出的匹配是不正确

(3)真阴性(True Negative,TN):检测健康,且实际健康;正确拒绝的非匹配数目;

(4)假阴性(False Negative,FN):检测健康,但实际不健康;漏报,没有正确找到的匹配的数目。

 .深入了解ROC曲线

ROC曲线其实是多个混淆矩阵的结果组合。

疾病检测为例,这是一个有监督的二分类模型,模型对每个样本的预测结果为一个概率值,我们需要从中选取一个阈值来判断健康与否。

定好一个阈值之后,超过此阈值定义为不健康,低于此阈值定义为健康,可以得出混淆矩阵。

而如果在上述模型中我们没有定好阈值,而是将模型预测结果从高到低排序,将每次概率值依次作为阈值,那么就可以得到多个混淆矩阵。

对于每个混淆矩阵,我们计算两个指标TPR和FPR,以FPR为x轴,TPR为y轴画图,就得到了ROC曲线。

一般来说,如果ROC是光滑的,那么基本可以判断没有太大的overfitting,AUC面积越大一般认为模型越好。

 .AUC值作为评价标准

1. AUC (Area Under Curve)

被定义为ROC曲线下的面积,取值范围一般在0.5和1之间。

使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

2.AUC 的计算方法

非参数法:(两种方法实际证明是一致的)

(1)梯形法则早期由于测试样本有限,我们得到的AUC曲线呈阶梯状。

曲线上的每个点向X轴做垂线,得到若干梯形,这些梯形面积之和也就是AUC。

(2)Mann-Whitney统计量 统计正负样本对中,有多少个组中的正样本的概率大于负样本的概率。这种估计随着样本规模的扩大而逐渐逼近真实值。

参数法:

(3)主要适用于二项分布的数据,即正反样本分布符合正态分布,可以通过均值和方差计算。

3.从AUC判断分类器(预测模型)优劣的标准

·AUC = 1是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。

·0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

·AUC = 0.5,     跟随机猜测一样(例:丢铜板),模型没有预测价值。

·AUC < 0.5,     比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

三种AUC值示例:

总结:AUC值越大的分类器,正确率越高

4. 不同模型AUC的比较

总的来说,AUC值越大,模型的分类效果越好,疾病检测越准确;

不过两个模型AUC值相等  并不代表 模型效果相同,例子如下:

下图中有三条ROC曲线,A模型比B和C都要好

下面两幅图中两条ROC曲线相交于一点,AUC值几乎一样:

当需要高Sensitivity时,模型A比B好;

当需要高Speciticity时,模型B比A好;

四 最优零界点咋么找

说人话,就是保证TPR高的同时FPR要尽量的小,建立max(TPR+(1-FPR))的模型。同样有三种方法:找到距离(0,1)最近的点、Youden index最小损耗(cost criterion)。

1.如果说Sn和Sp 分别对应于sensitivity和specificity,所有ROC曲线上的点到ROC的距离可以表示为,让d最小就好啦;

2.Youden index:最大化ROC曲线上的点到x轴的垂直距离(最大化TPR(Sn)和FPR(1-Sp)的差异);

3.考虑人力物力和财力(第三种方法很少用,因为很难评估)

.ROC的好基友——PR曲线

1.介绍

PR曲线和ROC曲线类似,ROC曲线是FPR和TPR的点连成的线,PR曲线是准确率和召回率的点连成的线,如下图所示。

 

我们又知道,Recall=TPR,因此PRC的横坐标为ROC的纵坐标。

2. ROC曲线与PR曲线的取舍

相对来讲ROC曲线会稳定很多,在正负样本量都足够的情况下,ROC曲线足够反映模型的判断能力。因此,对于同一模型,PRC和ROC曲线都可以说明一定的问题,而且二者有一定的相关性,如果想评测模型效果,也可以把两条曲线都画出来综合评价。

对于有监督的二分类问题,在正负样本都足够的情况下,可以直接用ROC曲线、AUC、KS   

评价模型效果。

在确定阈值过程中,可以根据Precision、Recall或者F1来评价模型的分类效果。

对于多分类问题,可以对每一类分别计算Precision、Recall和F1,综合作为模型评价指标。

在上图中,(a)和(c)为ROC曲线,(b)和(d)为Precision-Recall曲线

(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,

(c)和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。

可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。

参考资料

https://en.wikipedia.org/wiki/Receiver_operating_characteristic

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

http://www.it610.com/article/4964856.htm

http://zhwhong.ml/2017/04/14/ROC-AUC-Precision-Recall-analysis/

http://www.medicalbiostatistics.com/

 

 

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

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

.ROC曲线

需要提前说明的是,我们这里只讨论二值分类器。

对于分类器,或者说分类算法,评价指标主要有precision,recall,F-score1,以及我们今天要讨论的ROCAUC。下图是一个ROC曲线的示例2

正如我们在这个ROC曲线的示例图中看到的那样,

ROC曲线的横坐标为false positive rate(FPR),纵坐标为true positive rate(TPR)。下图中详细说明了FPR和TPR是如何定义的。

接下来我们考虑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曲线图中的虚线y=x上的点。

这条对角线上的点其实表示的是一个采用随机猜测策略的分类器的结果,

例(0.5,0.5),表示该分类器随机对于一半的样本猜测其为正样本,另外一半的样本为负样本。

二.如何画ROC曲线

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

我们先来看一下Wikipedia上对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)区间3

假如我们已经得到了所有样本的概率输出(属于正样本的概率),现在的问题是如何改变“discrimination threashold”?

我们根据每个测试样本属于正样本的概率值从大到小排序

下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率4

接下来,我们从高到低,依次将“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曲线的构造过程后,编写代码实现并不是一件困难的事情。

相比自己编写代码,有时候阅读其他人的代码收获更多,当然过程也更痛苦些。

在此推荐scikit-learn中关于计算AUC的代码

四.AUC意味着什么

那么AUC值的含义是什么呢?根据(Fawcett, 2006),AUC的值的含义是: >             The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.

这句话有些绕,我尝试解释一下:

首先AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。

当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类

五.为什么使用ROC曲线

既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。

在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。

下图是ROC曲线Precision-Recall曲线5的对比:

在上图中,(a)和(c)为ROC曲线,(b)和(d)为Precision-Recall曲线

(a)(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,

(c)(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。

可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线, 则变化较大。

说明,文中除了第一张图来自Wikipedia外,其他的图都来自论文(Fawcett, 2006)6截图.

引用及其他链接:

1.维基百科中对ROC的介绍: http://en.wikipedia.org/wiki/Receiver_operating_characteristic

2.ROC曲线及AUC评价指标 by 冒泡的崔:http://bubblexc.com/y2011/148/

我避免将precision,recall等评价指标翻译成中文,因为它们可能对应多个中文解释,极易产生混淆。 

3.图片来源:http://en.wikipedia.org/wiki/File:Roccurves.png 

4.这种映射不一定都是可靠的,即你不一定真的得到了某个样本是正样本的概率。 

5.注意这里使用了“Score”,而不是概率,我们暂且可以认为“Score”值就是是正样本的概率。 

6.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. 

7.(Fawcett, 2006),Fawcett, T. (2006). An introduction to ROC analysis. Pattern recognition letters, 27(8), 861-874.

猜你喜欢

转载自blog.csdn.net/u010608296/article/details/102650944