ROC曲线与PR曲线

时间:2022-12-08 18:51:57

之前一直知道怎么看ROC,没有过深理解相关概念(真阳假阳等)最近重新细看ROC和PR发现很多资料把这些概念搞得乱七八糟的,所以围绕ROC和PR阐述一下,并且比较两者在评价模型时的优劣。

一、概念介绍

1、混淆矩阵

ROC曲线与PR曲线

2、重要概念

真正率(True Positive Rate, TPR),又名灵敏度(Sensitivity):分类正确的正样本个数占整个正样本个数的比例,即:TPR=TP/(TP+FN )
假负率(False Negative Rate, FNR):分类错误的正样本的个数占正样本的个数的比例,即:FNR=FN/(TP+FN )
假正率(False Positive Rate, FPR):分类错误的负样本个数占整个负样本个数的比例,即:
    FPR=FP/(FP+TN)
真负率(True Negative Rate, TNR):分类正确的负样本的个数占负样本的个数的比例,即:TNR=TN/(FP+TN)

准确率(Accuracy):分类正确的样本个数占所有样本个数的比例,即:

ROC曲线与PR曲线

=


精确率(Precision):分类正确的正样本个数占分类为的正样本个数的比例,即:

ROC曲线与PR曲线ROC曲线与PR曲线

召回率(Recall)(即真正率):分类正确的正样本个数占正样本个数的比例,即:

ROC曲线与PR曲线ROC曲线与PR曲线

3、注意

很多课本和文章有很多概念,如真阳率,假阳率等等。最好按照英文记忆,下面说几个ROC和PR曲线会用的概念

1)召回率(Recall)=真正率(True Positive Rate, TPR)=灵敏度(Sensitivity)=查全率=覆盖率,分类正确的正样本个数占(真实)正样本个数的比例,例如,警察从20人(10个真正的小偷)里抓出了12个人,认为他们是小偷,其实只有8个才是真正的小偷,则Recall为80%,公式为:

ROC曲线与PR曲线ROC曲线与PR曲线

这个是ROC的Y轴,PR的X轴,能够反映分类器对于所有正样本识别出来的能力。

2)正例率FPR,又叫假阳率,假正率:分类错误的负样本(负的分为了正的)个数占(真实)负样本个数的比例,即:  FPR=FP/(FP+TN),例子可以模仿上面。ROC曲线的X轴假,能够反映分类器在识别正样本时犯错的能力。

3)精确率(Precision),也叫查准率:分类正确的正样本个数占分类为的正样本个数的比例,即:

ROC曲线与PR曲线

ROC曲线与PR曲线

二、ROC曲线

ROC曲线图如下图所示: 
ROC曲线与PR曲线
该曲线与绘制PR曲线类似,也是首先将样本按照正例的可能性进行排序,然后按顺序逐个把样本预测为正例(其实相当于取不同的阈值),然后计算FPR值和TPR值,即可获得该曲线。 
对于该曲线,我们首先有4个特殊的点要说明一下: 
(0,0)点:我们把所有的个体都预测为假,那我们可以知道TP与FP都为0,因为TP表示预测为真实际也为真,而FP表示预测为真实际为假的个体; 
(0,1)点:我们所有预测为真的个体都正确,这是我们最理想的情况,此时 TP=TP+FN ,而 FP=0 ; 
(1,0)点:这是预测最糟糕的情况,即所有的预测都是错误的,那么此时 TP=0 ,而 FP=FP+TN ; 
(1,1)点:因为其是在 y=x 的这条直线上,因此其相当于随机预测,即我预测一个个体为真还是假都是随机的。 
因此我们可以发现如果一个模型的ROC曲线越靠近与左上角,那么该模型就越优,其泛化性能就越好,但是对于两个模型,我们如何判断哪个模型的泛化性能更优呢?这里我们有主要以下两种方法:

  • 如果模型A的ROC曲线完全包住了模型B 的ROC曲线,那么我们就认为模型A要优于模型B;
  • 如果两条曲线有交叉的话,我们就通过比较ROC与X,Y轴所围得曲线的面积来判断,面积越大,模型的性能就越优,这个面积我们称之为AUC(area under ROC curve) 
    由于我们的样本通常是有限的,因此所绘制出来的曲线并不是光滑的,而是像曲线b那样,因此我们可以通过以下公式来计算AUC
    AUC=12i=1m1(xi1xi)(yi+yi+1)
    根据FPR以及TPR的定义我们有
    TPR=TPTP+FN=nP(Y=1)cp(fp|Y=1)dfpnP(Y=1)cp(fp|Y=1)dfp+nP(Y=1)cp(fp|Y=1)dfp=cp(fp|Y=1)dfpcp(fp|Y=1)dfp+cp(fp|Y=1)dfp
    FPR=FPFP+TN=nP(Y=0)cp(fp|Y=0)dfpnP(Y=0)cp(fp|Y=0)dfp+nP(Y=0)cp(fp|Y=0)dfp=cp(fp|Y=0)dfpcp(fp|Y=0)dfp+cp(fp|Y=0)dfp
    通过上面的公式运算,我们发现ROC曲线对于样本类别是否平衡并不敏感,即其并不受样本先验分布的影响,因此在实际工作中,更多的是用ROC/AUC来对模型的性能进行评价
三、PR曲线

ROC曲线与PR曲线


通过上图我们可以看到,当我们只把最可能为正例的个体预测为正样本时,其准确率最高位1.0,而此时的召回率则几乎为0,而我们如果把所有的个体都预测为正样本的时候,召回率为1.0,此时准确率则最低。但是我们如何通过PR曲线来判断哪个模型更好呢?这里有以下集中判断方式:

  • 基于曲线是否覆盖来进行判断。即如果模型B的PR曲线此时完全包住了模型C的PR曲线,此时我们认为模型B对于该问题更优于模型C,这也可以理解,因为在相同召回率的情况下,模型B的准确率要比模型C的更高,因此B必然更优一些。但是这种方法在曲线有交叉的时候不好判断;
  • 基于平衡点来进行判断。平衡点即为召回率与准确率相等的点,如果该点的值越大,则认为模型越优,但这样的判断过于简单;
  • 利用F1度量来进行判断。 F1=2PRP+R F1 的值越大越好,可以发现, F1 是一个准确率和召回率的调和平均数,其更care较小值,因此如果P与R中一个值太小会对 F1 产生更大的影响,但是这样的判断都是以准确率和召回率同等重要为基础的,但是对于很多问题,其会更care其中的一个指标,例如癌症的判断,其更关注的是召回率而不是准确率,因为如果我们更关注准确率,就会使得很多的癌症患者被误诊为不是癌症,从而造成患者的死亡率会更高;
  • 利用 Fβ 来判断。  Fβ=(1+β2)PRβ2P+R ,当 β=1 的时候,即为 F1 度量,当 β>1 的时候,召回率有更大的影响,反之准确率有更大的影响,这个很好理解,我们把 Fβ 转换一下又 Fβ=11+β2(β2R+1P) ,通过该公式我们可以看到当 β>1 的时候,R对于 Fβ 的影响更大。

四、ROC与PR比较

先说ROC,ROC(receiver operating characteristic curve)是曲线。也就是下图中的曲线。同时我们也看里面也上了AUC也就是是面积。一般来说,如果ROC是光滑的,那么基本可以判断没有太大的overfitting(比如图中0.2到0.4可能就有问题,但是样本太少了),这个时候调模型可以只看AUC,面积越大一般认为模型越好。

ROC曲线与PR曲线;再说PRC, precision recall curve。和ROC一样,先看平滑不平滑(蓝线明显好些),在看谁上谁下(同一测试集上),一般来说,上面的比下面的好(绿线比红线好)。F1(计算公式略)当P和R接近就也越大,一般会画连接(0,0)和(1,1)的线,线和PRC重合的地方的F1是这条线最大的F1(光滑的情况下),此时的F1对于PRC就好象AUC对于ROC一样。再说PRC, precision recall curve。和ROC一样,先看平滑不平滑(蓝线明显好些),在看谁上谁下(同一测试集上),一般来说,上面的比下面的好(绿线比红线好)。F1(计算公式略)当P和R接近就也越大,一般会画连接(0,0)和(1,1)的线,线和PRC重合的地方的F1是这条线最大的F1(光滑的情况下),此时的F1对于PRC就好象AUC对于ROC一样。一个数字比一条线更方便调模型。
ROC曲线与PR曲线

以上两个指标用来判断模型好坏,图有些不恰当。。。但是有时候模型没有单纯的谁比谁好(比如图二的蓝线和青线),那么选择模型还是要结合具体的使用场景。

下面是两个场景:
1. 地震的预测
对于地震的预测,我们希望的是RECALL非常高,也就是说每次地震我们都希望预测出来。这个时候我们可以牺牲PRECISION。情愿发出1000次警报,把10次地震都预测正确了;也不要预测100次对了8次漏了两次。
2. 嫌疑人定罪
基于不错怪一个好人的原则,对于嫌疑人的定罪我们希望是非常准确的。及时有时候放过了一些罪犯(recall低),但也是值得的。

对于分类器来说,本质上是给一个概率,此时,我们再选择一个CUTOFF点(阀值),高于这个点的判正,低于的判负。那么这个点的选择就需要结合你的具体场景去选择。反过来,场景会决定训练模型时的标准,比如第一个场景中,我们就只看RECALL=99.9999%(地震全中)时的PRECISION,其他指标就变得没有了意义。

如果只能选一个指标的话,肯定是选PRC了。可以把一个模型看的一清二楚。


五、参考:

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

http://blog.csdn.net/batuwuhanpei/article/details/51884351