ROC曲线

ROC曲线的动机

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

如下面这幅图:

ROC曲线与AUC指标_roc

蓝色表示原始为负类分类得到的统计图,红色为正类得到的统计图。那么我们取一条直线,直线左边分为负类,右边分为正。这条直线也就是我们所取的阈值。

阈值不同,可以得到不同的结果,但是由分类器决定的统计图始终是不变的。这时候就需要一个独立于阈值,只与分类器有关的评价指标,来衡量特定分类器的好坏。

还有在类不平衡的情况下,如正样本90个,负样本10个,直接把所有样本分类为正样本,得到识别率为90%。但这显然是没有意义的。

如上就是ROC曲线的动机。

混淆矩阵

关于两类分类问题,原始类为positive,negative,分类后的类别为正例,负例。预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵,如下:

ROC曲线与AUC指标_正例_02

TPR与FPR

  • TPR = TP / (TP + FN)
  • 在所有实际为正例的样本中,被正确地判断为正例的比率
  • 所有真实类别为 1 的样本中,预测类别为 1 的比例
  • FPR = FP / (FP + TN)
  • 在所有实际为假例的样本中,被错误地判断为正例的比率
  • 所有真实类别为 0 的样本中,预测类别为 1 的比例

放在具体领域来理解上述两个指标,如在医学诊断中,判断有病的样本。

  • 那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。
  • 而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。

不难发现,这两个指标之间是相互制约的。

如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。

最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。

ROC曲线

ROC空间将伪正例率(FPR)定义为 X 轴,真正例率(TPR)定义为 Y 轴:

ROC曲线与AUC指标_auc_03


ROC曲线与AUC指标_正例_04

我们可以看出,左上角的点(TPR=1,FPR=0)为完美分类,也就是这个医生医术高明,诊断全对。

  • 点A( TPR > FPR ),医生 A 的判断大体是正确的。
  • 中线上的点B( TPR = FPR ),也就是医生 B 全都是蒙的,蒙对一半,蒙错一半。
  • 下半平面的点C( TPR < FPR),这个医生说你有病,那么你很可能没有病,医生 C 的话我们要反着听,为真庸医。

上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是遍历所有的阈值,得到ROC曲线。

还是一开始的那幅图,假设如下就是某个医生的诊断统计图,直线代表阈值。我们遍历所有的阈值,能够在ROC平面上得到如下的ROC曲线。

ROC曲线与AUC指标_优化_05


曲线距离左上角越近,证明分类器效果越好。

ROC曲线与AUC指标_auc_06


如上,是三条ROC曲线,在0.23处取一条直线。

那么,在同样的低 FPR = 0.23 的情况下,红色分类器得到更高的PTR。也就表明,ROC越往上,分类器效果越好。

我们用一个标量值AUC来量化它。

AUC指标

AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。

  • AUC 的范围在[0, 1]之间,并且越接近1越好,越接近0.5属于乱猜
  • AUC = 1,完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
  • 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
  • AUC < 0.5,比随机猜测还差,但只要总是反预测而行,就优于随机猜测。