ROC与AUC理解

简介

ROC:(Receiver Operating Characteristic) 受试者工作特征 曲线
纵轴 : 真正例率 True Positive Rate 对应模型评估里的recall值 TP/(TP+FN) 预测正确的正样本数/所有正样本个数
直观上代表能将正例分对的概率,即正类覆盖率
横轴: 假正例率 False Positive Rate FP/(TN+FP) (假正/(真负+假正)) 预测出错的负样本数/所有负样本个数
直观上代表 将负类错分为正例的概率

ROC曲线

ROC的动机

对于0,1两类分类问题,一些分类器得到的结果往往不是0,1这样的标签,如神经网络得到诸如0.5,0.8这样的分类结果。这时,我们人为取一个阈值,比如0.4,那么小于0.4的归为0类,大于等于0.4的归为1类,可以得到一个分类结果。同样,这个阈值我们可以取0.1或0.2等等。取不同的阈值,最后得到的分类情况也就不同。如下面这幅图:

ROC与AUC理解
解释:

  • 蓝色代表负样本的分布范围 大约在阀值为C位置时 负样本最为集中
  • 红色代表正样本的分布范围,大约在阀值为A时 正样本最为集中

然而,我们选取一条直线,将其按照我们的意愿划分为正负类,左负右正,阀值不同 得到不同的结果
EG:
以直线划分 蓝色图左侧 TN 右侧 FP
红色图 左侧 FN 右侧TP
可以明显看到 不同位置 所预测的结果都存在一定的正负例的偏差
为了表达模型的好坏,我们需要一个指标只与分类器有关,来衡量特定分类器的好坏。

ROC曲线

ROC与AUC理解

  • 不同的阀值对应不同的TPR和FPR,相当于图像上每一个点其实际意义上都代表一个特定的阀值(若根据图像确定最佳阀值,需要使用一个指标–约登指数,也称正确指数,matlab中的roc函数可以算出),同样这对应一组特定的(FPR,TPR)。

  • 随着阀值的逐渐减小,越来越多的实例被划分为正例,但同时有更多的负例被误分成了正例,TPR和FPR都会增大。

  • 阀值最大时,对应坐标点(0,0),阈值最⼩小时,对应坐 标点(1,1)。

特殊点

  1. (0,1)点,FPR=0,TPR=1.即FP=0 ,TP=0 。
    最优分类器,所有的样本都正确分类了
  2. (1,0)点,FPR=1,TPR=1,即 FP=1,TP=0.
    负样本都预测为正值,正样本都预测为了负值。 最差的分类器
  3. (0,0) 点,FPR=TPR=0,所有的点都预测为了负值。
  4. (1,1)点,所有的点都预测为了正值。
  5. 对角线上的点 ,在y=x这条线上,实际上表示的是一个采用随机猜测策略的分类器的结果,TPR=FPR,从0 到1递增,是随机分类的。
    ROC与AUC理解
    图像越接近于(0,1)点分类效果越好

ROC曲线的绘制

假设已经得出⼀一系列列样本被划分为正类的概率,然后按照⼤大⼩小排序,下图是⼀一个示例例,图*有 20个测试样本,“class”⼀一栏表示每个测试样本真正的标签(P表示正样本,n表示负样 本),“Score”表示每个测试样本属于正样本的概率。
ROC与AUC理解
接下来从高到低,依次将“score”值作为阀值的thredhold,当测试样本大于或等于这个theredhold时,认为是正样本,否则为负样本。eg:对于第四个样本,其“Socre”值为0.6,那么样本1,2,3,4,均为正,因为其score值均大于0.6, 但其实第三个样本真实值为负,所以此时的FPR概率为0.1 (1/10 误分类为正的样本数/负样本个数,暂且这样理解) 事实上从第3 个样本 FPR就等于0.1了。
得出如下ROC曲线
ROC与AUC理解

《机器学习》中提到的ROC
ROC与AUC理解

当阀值取值越多,ROC曲线则会越平滑,最终形成类似于左图的平滑的zroc曲线。
但本质上其构成是锯齿状的,因此ROC曲线下的面积是由一个个小梯形形成的。

为什么使用ROC

因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。
下图是ROC曲线和Presision-Recall曲线的对比:

ROC与AUC理解
在上图中,(a)和©为Roc曲线,(b)和(d)为Precision-Recall曲线。
(a)和(b) 展示的是分类器在其原始测试集(正负样本均衡)的结果。(c)(d)是负样本数增加到原来的10倍后,分类器的结果,可以明显看出,ROC曲线基本保持原貌不变,而Precision-Recall曲线变化较大。

ROC曲线使用

ROC与AUC理解

如上,是3条ROC曲线,在特定的FPR下(召回率) 在同样的低FPR=0.23的情况下,红色分类器得到更高的PTR。也就表明,ROC越往上,分类器效果越好。
如果直接值根据其曲线哪个最靠近(0,1)来判断其是否最优,不好量化。
我们可用一个标量值——下夹面积AUC来量化它。

多个实例概率/得分相同

还需要考虑特殊情况:如果一个分类器打分结果中,有多个实例得分是一样的情况下,ROC
曲线要怎么画?比如现在有10个实例得分相同,其中6个是正例,4个是反例。

对这10个实例采用不同的具体排序方式,ROC路线是不一样的(红色点代表排在这10个实例之前的那个实例):
ROC与AUC理解
上图中对应两种排序方式:把所有正例排在前面;把所有反例排在前面。对于其他混合排序的情况,其路线都落在这个矩形内部。ROC曲线应该表示分类器的期望性能,也就是对角线。

AUC(Area Under ROC Curve)

roc曲线的下夹面积 属于0-1之间,AUC作为数值可以直观得评价分类器的好坏.
值越大越好。
AUC的面积可以这样算:(由一个个小梯形组成)
ROC与AUC理解

AUC判断分类器优劣的标准:

  1. AUC=1,完美分类器,采用这个预测模型时,存在至少一个阀值能得出完美预测。 但绝大多数场合,不存在完美的分类器。
  2. 0.5<AUC<1,优于随机猜测。这个分类器妥善设置阀值的话,能有预测价值。
  3. AUC=0.5,跟随机猜测一样(如丢硬币),模型没有预测价值。
  4. AUC<0.5, 比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

AUC的物理意义

假设分类器的输出是样本属于正类的score(置信度),则AUC的物理意义为,任取一对(正、负)样本,正样本的score大于负样本的概率。

损失公式

给定m+个正例,m-个负例,令D+,D-分别表示正、反例集合,则“损失(loss)”定义为:
ROC与AUC理解
损失公式计算的是排序损失,将正例的预测值小于反例,则记一个“罚分”,若相等,则数量除以2 ,记0.5个“罚分”。

ROC曲线中,每遇到一个正例向上走一步,每遇到一个反例向右走一步,对于所有的正例,其横坐标所代表的步数就是得分比其高的反例数。我们修改ROC空间的坐标,对横坐标乘以m−,对纵坐标乘以m+,在这个空间中每一步的刻度为1。
ROC与AUC理解
如图,蓝色的线表示ROC曲线。根据这个曲线,我们可以知道正反例顺序(反,正,[正,反],反,正,…).对第一个正例,对应的区域1,区域1的面积表示排在其前面的反例数。
第二个正例和第三个正例是特殊情况,它们和一个反例得分是相同的。我们把这种情况一般化,假设有p个正例和q个反例的得分相同,那么有斜线对应的三角形的面积为q2∗p
,这和公式(2.21)中的相应的情况吻合。

所以有
ROC与AUC理解
左右两边同时除以m+m−,得到公式(2.22)。
ROC与AUC理解
l rank对应的是ROC 曲线上的面积。若能一个正例在ROC曲线上对应标记点的坐标为(x,y),则x恰是排序咋其之前的反例所占的比例,即假正例率。

AUC值的计算

1)第一种方法:AUC为ROC曲线下的面积,那我们直接计算面积可得。面积为一个个小的梯形面积之和,计算的精度与阈值的精度有关。
  (2)第二种方法:根据AUC的物理意义,我们计算正样本score大于负样本的score的概率。取NM(N为正样本数,M为负样本数)个二元组,比较score,最后得到AUC。时间复杂度为O(NM)。
  (3)第三种方法:与第二种方法相似,直接计算正样本score大于负样本的score的概率。我们首先把所有样本按照score排序,依次用rank表示他们,如最大score的样本,rank=n(n=N+M),其次为n-1。那么对于正样本中rank最大的样本(rank_max),有M-1个其他正样本比他score小,那么就有(rank_max-1)-(M-1)个负样本比他score小。其次为(rank_second-1)-(M-2)。最后我们得到正样本大于负样本的概率为:
ROC与AUC理解
时间复杂度为O(N+M)。

sklearn使用

from sklearn.metrics import roc_curve,auc
ROC与AUC理解

参考

[1]. https://blog.csdn.net/qq_37059483/article/details/78595695/
[2]. https://www.cnblogs.com/gatherstars/p/6084696.html/
[3]. ROC曲线的最佳阈值如何选取[https://blog.csdn.net/sunxingxingtf/article/details/42751295]