理解ROC和AUC

2024-04-27

1. 理解ROC和AUC

 放在具体领域来理解上述两个指标。如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。
   在上述癌症检测中(正反例极度不平衡的情况下),
   有时我们还会见到sensitivity和specificity两个概念:
   也就是说想要sensitivity高一点相当于要True Positive Rate高一点,要specificity高一点相当于False Positive Rate低一点/。为了权衡recall和precision,对于评判二分类器的优劣,可以使用ROC(Receiver Operating Characteristic)曲线以及AUC(Area Under roc Curve)指标。
   ROC曲线的几个概念:
   以医生诊断为例,我们可以看出:
                                           上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是 遍历所有的阈值 ,得到ROC曲线。还是一开始的那幅图,假设如下就是某个医生的诊断统计图,直线代表阈值。我们遍历所有的阈值,能够在ROC平面上得到如下的ROC曲线。   
                                           
   以一个简单的模拟数据来计算下ROC曲线每个点的值
   Python可以用sklearn,R可以用ROCR包或者pROC包,这里以ROCR包来检验下上述计算结果:
   x.values对应FPR,y.values对应TPR, alpha.values对应预测打分cutoff,结果跟上面完全一致,然后简单做个ROC图。
                                           AUC值就相当于ROC曲线的所覆盖的面积,可以从ROC曲线看出AUC值越大,其分类效果越好。
    理解ROC和AUC     ROC曲线与AUC值 

理解ROC和AUC

2. AUC与ROC

 分类任务不同于回归,本次记录一下分类任务中常用的评价指标AUC与ROC
   在搞清楚ROC和AUC之前,需要先弄明白混淆矩阵   混淆矩阵中有着Positive、Negative、True、False的概念,其意义如下:   ○ 称预测类别为1的为Positive(阳性),预测类别为0的为Negative(阴性)。   ○ 预测正确的为True(真),预测错误的为False(伪)。   那么就产生了如下的混淆矩阵:
                                                                                                                                                                   其实也就是 y=x直线,其含义为将正类预测正确的概率=将负类预测正确的概率=0.5,那么就容易看出来,我们期望该条线尽量往左上方偏,也就是尽量让正类预测正确的概率大一些,如下面的图:
                                                                                                                                                                                                            AUC的优势: 

3. 大白话解释P-R曲线,ROC曲线和AUC曲线

在分类问题里,有几个重要的指标可以用来衡量算法的能力,比如Recall(召回率),Precision(精确率),F1值等。P-R曲线,ROC曲线,AUC曲线等。之前已经对前三个进行过介绍,本次只介绍后三个。
   【1】背景知识
   还是以二分类为例,混淆矩阵如下:
                                          
 在二分类的前提下,所有的case,它的真实情况(label)只有两种情况(1/0),预测结果也只有两种情况(1/0),所有的排列组合就有四种情况,如上图所示1-4个区域。
   其中recall(召回率),也叫查全率;precision(精确率),也叫查准率
   以上为背景知识。
  
 【2】P-R曲线
   同一个模型,在不同阈值(threadhold)条件下,对应的recall和precision是不一样的,一般随着一个的升高另一个会降低,正所谓鱼和熊掌不能兼得。那么遍历所有的阈值,就会有若干的准召率数据对。把这些数据对分别设置成横坐标与纵坐标,画出的曲线就是P-R曲线,如下
                                          
 如果一个学习器的P-R曲线被另一个学习器的P-R曲线完全包住,则可断言后者的性能优于前者,例如上面的A和B优于学习器C。但是A和B的性能无法直接判断,我们可以根据曲线下方的面积大小来进行比较,但更常用的是平衡点或者是F1值。
   平衡点(BEP)是P=R时的取值,如果这个值较大,则说明学习器的性能较好。
   F1 = 2 * P * R /( P + R ),同样,F1值越大,我们可以认为该学习器的性能较好。
   另外可以通过实际的需求来确定A和B的选择,如需要一个高精确的自动处理模型(可以少召回但是需要避免误伤),那就需要使用A模型并采用比较高的阈值;
   而如果需要一个高召回模型保证召回率,不太关心误伤,那可以使用模型B并采用比较低的阈值。
  
 【3】ROC曲线
   ROC曲线的横纵坐标分别是召回率和误杀率(1-精确率) 上面混淆矩阵图中的3/(2+3),以及1/(1+4),纵坐标可以理解为抓住
   坏人的比例;横坐标可以理解为误伤好人的比例。
   而ROC曲线的两个极端[0,0]点表示(用抓坏人来举例)不管好人坏人全放过,也就是抓住坏人0%,误伤好人0%,不抓坏人也不误伤好人。[1,1]点表示不管好人坏人全抓住,也就是抓住坏人100%,误伤好人100%
                                          
 【4】AUC曲线
   AUC曲线是ROC曲线下的面积,介于0和1之间,作为数值可以直观的评价分类器的好坏,值越大越好。
   AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
   0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
   AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值

大白话解释P-R曲线,ROC曲线和AUC曲线

4. ROC曲线的意义


5. ROC曲线的概念

在ROC空间中,以FP rate为横轴、TP rate为纵轴
  
 ROC曲线是显示Classification模型真正率和假正率之间折中的一种图形化方法。
  
 解读ROC图的一些概念定义::
  
  真正(True Positive , TP) 被模型预测为正的正样本;
  
  假负(False Negative , FN) 被模型预测为负的正样本;
  
  假正(False Positive , FP) 被模型预测为正的负样本;
  
  真负(True Negative , TN) 被模型预测为负的负样本。
  
  真正率 (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)或特指度(specificity)
  
 TNR = TN /(TN + FP) (负样本预测结果数 / 负样本实际数)
  
 目标属性的被选中的那个期望值称作是“正”(positive)

ROC曲线的概念

6. ROC AUC 代价曲线

 我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,与P—R曲线的使用查准率与查全率为纵,横轴不同,ROC曲线的 纵轴是“真正例率(TPR,True Positive Rate)” , 横轴是“假正例率(False Positive Rate)”. 
                                                                                                                           进行学习器比较时,与P—R图相似,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可以断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣,此时如果一定要进行比较,则较为合理的判断依据是 比较ROC曲线下的面积 ,即AUC.
                                           形象化地看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系
                                           若正例的预测值小于反例,则记1个罚分,若相等则记0.5个罚分(可以理解成线代里面的逆序对数量),那么rank—loss对应的是ROC曲线之上的面积
                                           明确参数   : p=m+/m
   目的:对于一个模型,根据p不同,找到使得代价总期望最小的模型的阈值
   横轴:归一化的正概率代价期望
                                           纵轴:归一化的总代价期望
                                           大致过程:给定p,给定模型根据归一化代价期望的最小值    确定混淆矩阵的成分比例 ,阈值决定了这个比例,那如果这个比例确定了,阈值也就确定了,所以这时模型的阈值也对应确定下来了,也就是模型固定下来了   同时模型的综合考量指标P,R,F1,Fbeta等都确定下来了
   下面我们用实例来说明一个阈值对应一条直线,我们的例子是一个二分类问题,它是五还是不是五,样本是如图所示的十二张图片进入该分类器后,给其打分
   评判标准:得分越高的越是五,得分越低的越不是五
                                                                                   1.如果我们使用Pcosts作为横轴,得出的是红色直线,而以p作为横轴,得出的是紫色弯曲虚线,不是一个线性关系,虽然我们想要的就是已知某一个p,我们到底应该对应哪一条曲线的θ值更好,但是不能拿p当横轴,因为其返回曲线是非线性的,不利于我们分析。
   2. 当p等于0时Pcosts等于0,cost_norm=FPR;当p等于1时Pcosts等于1,cost_norm=FNR 
                                           3.p的含义: 连接两点的线段如何用参数方程表示? 假设两点分别是A,B,如果想表示AB连线所有点的集合用 λA+(1-λ)B,λ∈[0,1] ,通过λ的变化,我们可以得到线段AB。、
   生成多个阈值下的曲线

7. ROC曲线的概念和意义

 受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线),又称为 感受性 曲线(sensitivity curve)。得此名的原因在于 曲线上各点反映着相同的感受性 ,它们都是对同一 信号刺激 的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以假阳性概率(False positive rate)为 横轴 ,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线。
   ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。传统的诊断试验评价方法有一个共同的特点,必须将试验结果分为两类,再进行统计分析。ROC曲线的评价方法与传统的评价方法不同,无须此限制,而是根据实际情况,允许有中间状态,可以把试验结果划分为多个有序分类,如正常、大致正常、可疑、大致异常和异常五个等级再进行统计分析。因此,ROC 曲线 评价方法适用的范围更为广泛。
   1.ROC曲线能很容易地查出任意界限值时的对性能的识别能力。
   2.选择最佳的诊断界限值。ROC曲线越靠近左上角,试验的 准确性 就越高。最靠近左上角的ROC曲线的点是错误最少的最好 阈值 ,其假阳性和假阴性的总数最少。
   3.两种或两种以上不同诊断试验对算法性能的比较。在对同一种算法的两种或两种以上诊断方法进行比较时,可将各试验的ROC曲线绘制到同一坐标中,以直观地鉴别优劣,靠近左上角的ROC曲线所代表的受试者工作最准确。亦可通过分别 计算 各个试验的ROC曲线下的面积(AUC)进行比较,哪一种试验的 AUC最大,则哪一种试验的诊断价值最佳。
   该方法简单、直观,通过图示可观察分析方法的准确性,并可用肉眼作出判断。ROC曲线将灵敏度与 特异性 以图示方法结合在一起,可准确反映某分析方法特异性和敏感性的关系,是试验准确性的综合代表。ROC曲线不固定分类界值,允许中间状态存在,利于使用者结合专业知识,权衡漏诊与误诊的影响,选择一更佳截断点作为诊断参考值。提供不同试验之间在共同标尺下的直观的比较,ROC曲线越凸越近左上角表明其诊断价值越大,利于不同指标间的比较。曲线下面积可评价诊断准确性

ROC曲线的概念和意义

8. AUC、ROC、FROC简介

 在机器学习中模型进行预测时,会得到一下几个结果:
   而通过TP,FP,TN,FN这几个值又可以间接地计算得到一些能够评价我们模型好坏的指标:
                                           接收者操作特征曲线(receiver operating characteristic curve,或者叫ROC曲线)将假阳性率(FPR/(1-specificity))作为X轴,真阳性率(TPR)作为Y轴,其中:
    给定一个二元分类模型和它的阈值(通常是一个概率),就能从所有样本的真实值和预测值计算出一个坐标点(X=FPR,Y=TPR)坐标点。将同一个模型每个阈值的(FPR,TPR)坐标都画在ROC空间里,就成为特定模型的ROC曲线。 
   从 (0, 0) 到 (1,1) 的对角线将ROC空间划分为左上/右下两个区域,在这条线的以上的点代表了一个好的分类结果(胜过随机分类),而在这条线以下的点代表了差的分类结果(劣于随机分类)。
   完美的预测点是一个在左上角的点,在ROC空间坐标(0,1)点,X=0代表着没有假阳性(所有阴性均正确预测),Y=1代表没有假阴性(所有阳性均正确预测),也就是说,不管分类器输出结果是阳性或阴性,都是100%正确。一个随机的预测会得到位于从 (0, 0) 到 (1, 1) 对角线(也叫无识别率线)上的一个点;最直观的随机预测的例子就是抛硬币。
                                           在比较不同的分类模型时,可以将每个模型的ROC曲线都画出来,比较曲线下面积(即AUC)做为模型优劣的指标。
   ROC曲线下方的面积(Area under the Curve of ROC (AUC ROC)),其意义是:
   FROC (Free-response ROC) 曲线常在图像识别任务中作为效果评估指标。
   经典的ROC方法不能解决对一幅图像上多个异常进行评价的实际问题,70年代提出了无限制ROC的概念(free-response ROC;FROC)。FROC允许对每幅图像上的任意异常进行评价。
   FROC曲线与之前的ROC只是横坐标的不同。横坐标是误报率(测试中所有不是实际结节预测成结节的个数/测试CT个数),纵坐标是召回率(测试所有CT数据中实际是结节的检测出来个数/测试所有CT数据中实际是结节个数)。
   具体举个简单的例子:我们的测试集就两个ct序列:
   第一个其中真结节2个,检测出的结节自信度列表[0.99,0.8,0.7,0.5,0.4,...](已经从大到小排列过了),其中真结节是0.99和0.5对应的结节。
   第二个其中真结节1个,检测出的结节自信度列表[0.9,0.8,0.7,0.6,0.5,...]其中真结节0.8对应的结节.
   假设你把自信度阈值设置为0.90(这个值在计算时一般有一个等比列表),那么这时检测到了一个真结节,召回率是(1+0)/(2+1)=1/3,而误报率是(0+1)/(2)=1/2,(0+1)代表所有CT序列中误报结节数,(2)代表CT序列的个数。这可以画出FROC中的点(1/2,1/3)。
   然后,你再把自信度阈值设置为0.80,那么这时检测到的还是二个真结节,召回率是(1+1)/(2+1)=2/3,而误报率是(1+1)/(2)=1,这可以画出FROC中的点(1,2/3)。
   以此类推当你把自信度阈值设置为0.5时,那么这时检测到的就是三个真结节,召回率是3/3=1,而误报率是(6)/(2)=3,这可以画出FROC中的点(3,1)。
   这样就能画出一条FROC曲线来了。
   参考:    维基百科:ROC曲线     关于肺结节检测相关的FROC曲线和目标检测中Precision-Recall曲线,ROC曲线,mAP,AP,APs,APm,APl,AP0.5等的理解     如何理解机器学习和统计中的AUC?     AUC:直观理解AUC为何会对正负样本数分布不均匀情况鲁棒