分享

ROC曲线学习总结

 广旭qsian65x0b 2019-12-20

ROC曲线学习总结

最近在学习机器学习基础知识部分的时候,看到了用于评估模型性能的ROC曲线,想起来之前上课的时候听老师提起过,当时没有认真去看,所以这次大体上了解了一下,来谈谈自己的看法,并做些总结。

1. ROC曲线(Receiver Operating Characteristic)的概念和绘制

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

首先介绍一下在模型评估上的一些基本概念:

真实情况预测结果含义 统计量
正例反例
正例TP(将正例正确预测为正例)FN(将正例错误预测为负例)TP + FN 表示实际数据集中正样本的数量召回率Recall / 灵敏度Sensitivity / TPR = TP/(TP+FN), 漏诊率 = 1 - 灵敏度
反例FP(将负例错误的预测为正例)TN(将负例正确的预测为负例)FP + TN 表示实际数据集中负样本的数量FPR = FP/(FP+TN), 特异度(Specificity) = 1 - FPR = TN/(FP+TN)
加和含义TP + FP 表示预测的正类样本数 FN + TN 表示预测的负类样本数TP + FN + FP + TN 表示样本总数
统计量精确率Precision = TP/(TP+FP)

正确率Accuracy = (TP+TN)/(TP+TN+FP+FN), 错误率 = (FP+FN)/(TP+TN+FP+FN), F-measure = 2*(Precision*Recall)/(Precision+Recall)

其中最重要的两个公式如下:

TPR=TPTP+FN,FPR=FPFP+TNTPR=TPTP+FN,FPR=FPFP+TNTPR = \frac{TP}{TP+FN} ,FPR = \frac{FP}{FP+TN}TPR=TP+FNTP,FPR=FP+TNFP

在ROC曲线图中,每个点以对应的FPRFPRFPRFPR值为横坐标,以TPRTPRTPRTPR值为纵坐标

ROC曲线的绘制步骤如下:

  1. 假设已经得出一系列样本被划分为正类的概率Score值,按照大小排序。

  2. 从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于某个样本,其“Score”值为0.6,那么“Score”值大于等于0.6的样本都被认为是正样本,而其他样本则都认为是负样本。

  3. 每次选取一个不同的threshold,得到一组FPR和TPR,以FPR值为横坐标和TPR值为纵坐标,即ROC曲线上的一点。

  4. 根据3中的每个坐标点,画图。

ROC曲线绘制实例

1、分析数据
y_true = [0, 0, 1, 1];scores = [0.1, 0.4, 0.35, 0.8];
2、列表

样本预测属于P的概率(score)真实类别
y[0]0.1N
y[1]0.4N
y[2]0.35P
y[3]0.8P

3、将截断点依次取为score值,计算TPR和FPR。
当截断点为0.1时:
说明只要score>=0.1,它的预测类别就是正例。 因为4个样本的score都大于等于0.1,所以,所有样本的预测类别都为P。
scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [1, 1, 1, 1];
正例与反例信息如下:


正例反例
正例TP=2FN=0
反例FP=2TN=0

由此可得:
TPR = TP/(TP+FN) = 1; FPR = FP/(TN+FP) = 1;

当截断点为0.35时:
scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 1, 1, 1];
正例与反例信息如下:


正例反例
正例TP=2FN=0
反例FP=1TN=1

由此可得:
TPR = TP/(TP+FN) = 1; FPR = FP/(TN+FP) = 0.5;

当截断点为0.4时:
scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 1, 0, 1];
正例与反例信息如下:


正例反例
正例TP=1FN=1
反例FP=1TN=1

由此可得:
TPR = TP/(TP+FN) = 0.5; FPR = FP/(TN+FP) = 0.5;

当截断点为0.8时:
scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 0, 0, 1];

正例与反例信息如下:


正例反例
正例TP=1FN=1
反例FP=0TN=2

由此可得:
TPR = TP/(TP+FN) = 0.5; FPR = FP/(TN+FP) = 0;

4、根据TPR、FPR值,以FPR为横轴,TPR为纵轴画图。

2. 利用ROC曲线评价模型性能——AUC(Area Under Curve)

AUC表示ROC曲线下的面积,主要用于衡量模型的泛化性能,即分类效果的好坏。AUC是衡量二分类模型优劣的一种评价指标,表示正例排在负例前面的概率。一般在分类模型中,预测结果都是以概率的形式表现,如果要计算准确率,通常都会手动设置一个阈值来将对应的概率转化成类别,这个阈值也就很大程度上影响了模型准确率的计算。

之所以采用AUC来评价,主要还是考虑到ROC曲线本身并不能直观的说明一个分类器性能的好坏,而AUC值作为一个数量值,具有可比较性,可以进行定量的比较。

AUC值的计算方法

  • 将坐标点按照横坐标FPR排序 。

  • 计算第iiii个坐标点和第i+1i+1i+1i+1个坐标点的间距dxdxdxdx 。

  • 获取第iiii或者i+1i+1i+1i+1个坐标点的纵坐标y。

  • 计算面积微元ds=ydxds=ydxds=ydxds=ydx。

  • 对面积微元进行累加,得到AUC。

AUC值对模型性能的判断标准

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

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

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

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

3. 利用ROC曲线选择最佳模型

首先了解一下ROC曲线图上很重要的四个点:

  1. 第一个点(0,1)(0,1)(0,1)(0,1),即FPR=0, TPR=1,这意味着FN(False Negative)=0,并且FP(False Positive)=0。意味着这是一个完美的分类器,它将所有的样本都正确分类。

  2. 第二个点(1,0)(1,0)(1,0)(1,0),即FPR=1,TPR=0,意味着这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。

  3. 第三个点(0,0)(0,0)(0,0)(0,0),即FPR=TPR=0,即FP(False Positive)=TP(True Positive)=0,可以发现该分类器预测所有的样本都为负样本(Negative)。

  4. 第四个点(1,1)(1,1)(1,1)(1,1),即FPR=TPR=1,分类器实际上预测所有的样本都为正样本。

从上面给出的四个点可以发现,==ROC曲线图中,越靠近(0,1)的点对应的模型分类性能越好。==而且可以明确的一点是,ROC曲线图中的点对应的模型,它们的不同之处仅仅是在分类时选用的阈值(Threshold)不同,每个点所选用的阈值都对应某个样本被预测为正类的概率值。

那么我们如何根据ROC曲线图定量的找到当前最优的分类模型呢?

3.1 不同模型之间选择最优模型

当然最直观的比较方式就是基于AUC值,不同的模型对应的ROC曲线中,AUC值大的模型性能自然相对较好。而当AUC值近似相等时,有两种情况:第一种是ROC曲线之间没有交点;第二种是ROC曲线之间存在交点。在两个模型AUC值相等时,并不代表两个模型的分类性能也相等。

ROC曲线之间没有交点

如下图所示,A,B,C三个模型对应的ROC曲线之间交点,且AUC值是相等的,此时明显更靠近(0,1)(0,1)(0,1)(0,1)点的A模型的分类性能会更好。

ROC曲线之间存在交点

如下图所示,模型A、B对应的ROC曲线相交却AUC值相等,此时就需要具体问题具体分析:当需要高Sensitivity值时,A模型好过B;当需要高Specificity值时,B模型好过A。

在这里插入图片描述

3.2 同一模型中选择最优点对应的最优模型

根据前面的内容,我们可以知道,在同一条ROC曲线上,越靠近(0,1)(0,1)(0,1)(0,1)的坐标点对应的模型性能越好,因为此时模型具有较高的真正率和较低的假正率。那么我们如何定量的从一条ROC曲线上找到这个最优的点呢?通常需要借助ISO精度线来找到这个最优的点

ISO精度线(ISO Accuracy Lines)

ISO精度线实际上一类斜率确定而截距不确定的直线,设ISO精度线的方程为y=ax+by=ax+by=ax+by=ax+b,其中aaaa为直线的斜率,bbbb为直线的截距。

a=NEGPOSa=NEGPOSa = \frac{NEG}{POS}a=POSNEG

其中,NEGNEGNEGNEG为数据集中负样本的数目,POSPOSPOSPOS为数据集中正样本的数目

如下图所示,当a=0.5a=0.5a=0.5a=0.5时,图中的红线都可以作为ISO精度线

在这里插入图片描述

根据ISO精度线确定最优点

因为ROC曲线上的点都是在同一模型下改变分类阈值得到的,所以在同一条ROC曲线上确定最优点的过程,其实就是确定最佳分类阈值的过程,这个阈值能够让模型在高真正率和低假正率之间取得最好的平衡,即模型的分类性能最好。

根据ISO精度线确定最优点的步骤:

  1. 首先得到ISO精度线的斜率 a=NEGPOSa=NEGPOSa = \frac{NEG}{POS}a=POSNEG

  2. 初始化截距b=0b=0b=0b=0,即此时的直线方程为y=axy=axy=axy=ax

  3. 逐渐增大截距,即把直线向左上角移动,直到直线与ROC曲线只有一个交点,则这个交点即为我们要找的最优点,这个最优点对应的分类阈值即为使得当前模型性能最优的分类阈值(本来刚开始考虑这个点应该是切点,不过后来想想应该不是,因为ROC图本身是不连续的,相邻节点间都是通过直线连接的)

3.3 当测试集中的正负样本的分布变换的时候,ROC曲线能够保持不变

之所以把ROC曲线的这个特性特意提出来讲,是因为我觉得这是ROC曲线和AUC这个评价标准最大的优势所在。其他的如正确率、精确率、召回率和F值都会受到样本分布的影响,即对于同一模型,采用这些指标进行性能评估的话,如果输入的样本中正负样本分布发生变化,则最终的正确率等参数也会变化,这种最终结果会被输入样本分布影响的特性,显然使得这些指标在评估某个样本性能时会对输入样本产生依赖,不能很客观的反应模型的性能(所以这也是为什么一个可信数据集非常重要的原因,因为数据集不仅影响对模型的训练,也会直接影响对模型性能的评估。基于这两点,我们就可以断言,对于同一个模型,更可信的数据集肯定能够取得更好的效果。)

而对应于同一个模型,当其中的正负样本分布发生变化时,ROC曲线能够基本保持不变,这就保证至少在模型评估阶段,样本分布不会对这一过程产生太大的影响。

那么如何理解这种不变性呢?网上找了很多博客都没有人解释过,我也只能简要的谈谈我的想法,日后如果看到了比较权威的解释再来补充吧。

首先,ROC曲线每个点都是以某个阈值对应的TPR为纵坐标,以对应FPR为横坐标,所以不变性肯定是反映在样本分布改变时,ROC曲线图中的点随着阈值变化横纵坐标的变化保持一致。

举个例子,当一个数据集中有PPPP个正样本和NNNN个负样本时,对应于某个阈值ThresholdThresholdThresholdThreshold,其TPRTPRTPRTPRFPRFPRFPRFPR计算公式如下:

TPR=TPTP+FN,FPR=FPFP+TNTPR=TPTP+FN,FPR=FPFP+TNTPR = \frac{TP}{TP+FN} ,FPR = \frac{FP}{FP+TN}TPR=TP+FNTP,FPR=FP+TNFP

当我们将负样本的数目增加十倍,即此时数据集中有PPPP个正样本和10N10∗N10*N10N个负样本,根据上面的计算公式可知,在负样本数量增加十倍之后,

  1. TPRTPRTPRTPR值的取值范围是不变,因为TP+FNTP+FNTP+FNTP+FN不变,同时TPTPTPTP的取值为[0,P][0,P][0,P][0,P]之间的整数,所以TPRTPRTPRTPR的离散取值区间在负样本增加的情况下是不变的。

  2. TPRTPRTPRTPR值不变的条件下,此时对应的ThresholdThresholdThresholdThreshold阈值基本不变(如果变化,则TPRTPRTPRTPR值不可能不变),其对应的FPRFPRFPRFPR值的取值范围也是不变的。根据样本独立同分布的假设,负样本数目改变,但负样本的预测概率分布是不变的,即当ThresholdThresholdThresholdThreshold不变时,FPFPFPFP值和FP+TNFP+TNFP+TNFP+TN值应该是等比例变化的,此时FPRFPRFPRFPR值不变。

综上,我们可以从感性认识上证明当样本的分布发生变化时,ROC曲线能够基本保持不变。

接下来给出一个实例,对比ROC曲线和PR(Precision-Recall)曲线在样本分布变化时的不同。下图中,(a)和(b)分别为从初始测试集中得到的ROC曲线和PR曲线,©和(d)分别为负样本增加十倍之后得到的ROC曲线和PR曲线。由图中可知,当样本分布变化时,ROC曲线基本没有变化,而PR曲线则变化很大,这充分说明了ROC曲线在模型性能评估上的优势。

在这里插入图片描述

ROC曲线在多分类问题上的推广

经典的ROC曲线适用于对二分类问题进行模型评估,通常将它推广到多分类问题的方式有两种:

  1. 对于每种类别,分别计算其将所有样本点的预测概率作为阈值所得到的TPRTPRTPRTPRFPRFPRFPRFPR值(是这种类别为正,其他类别为负),最后将每个取定的阈值下,对应所有类别的TPRTPRTPRTPR值和FPRFPRFPRFPR值分别求平均,得到最终对应这个阈值的TPRTPRTPRTPRFPRFPRFPRFPR

  2. 首先,对于一个测试样本:1)标签只由0和1组成,1的位置表明了它的类别(可对应二分类问题中的‘’正’’),0就表示其他类别(‘’负‘’);2)要是分类器对该测试样本分类正确,则该样本标签中1对应的位置在概率矩阵P中的值是大于0对应的位置的概率值的。

上面的两个方法得到的ROC曲线是不同的,当然曲线下的面积AUC也是不一样的。 在python中,方法1和方法2分别对应sklearn.metrics.roc_auc_score函数中参数average值为’macro’和’micro’的情况。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多