西瓜书《机器学习》阅读笔记3——Chapter2_ROC曲线

时间:2022-12-07 15:45:48

以下所有的讨论都是针对二分类任务。

ROC曲线介绍

ROC全称是Receive Operating Characteristic,中文称作受试者工作特征。
假设现在有m个测试集,其中正例数 m+ ,反例数为 m 。对任意一个实例,分类器有两种可能的输出:一种是直接输出label,一种是预测为正例的概率或者得分。
对于输出label的分类器,可以得到m个测试集上的预测结果。根据预测结果以及真实标记可以得到一个混淆矩阵。

  预测为P 预测为N
实际为P TP FN
实际为N FP TN



定义如下两个量:

TPR=TPTP+FN

FPR=FPFP+TN

称TPR为真正例率,表示实际为正例的样本中预测为正例的比例;称FPR为假正例率,表示实际为反例的样本中预测为正例的比例。ROC空间就是以FPR作为横轴,以TPR作为纵轴的二维空间。这样对于上面的混淆矩阵,我们计算出的(FPR,TPR)对应ROC空间上一个点,这个点表示的就是对应分类器的性能。

ROC空间中有四个特殊点:(0,0)表示实际为正例的样本全部预测错误,而实际为反例的样本全部预测正确;(0,1)表示所有样本全部预测错误;(1,0)表示所有样本全部预测正确;(1,1)表示实际为正例的样本全部预测正确,实际为反例的样本全部预测错误。在ROC空间中越靠近左上角的分类器,性能越好。

上面的介绍都是针对输出为label的分类器。而对于输出为正例概率或者得分的分类器,可以按照概率或者得分的大小对实例进行排序,这样排在前面的实例是正例的可能性大,排在后面的实例是正例的可能性小。然后按顺序,每次以当前实例的概率/得分做阈值。概率/得分超过或等于此阈值的实例预测为正例,否则预测为反例(其实就是把所有排在当前实例前面的实例以及当前实例预测为正例;其余预测为反例)。这样当前实例有m种,每一种都对应一次预测,而每一次预测都有对应的混淆矩阵。于是在ROC空间中我们可以得到m个点,这m个点的连线称为分类器的ROC曲线。m越大,曲线越光滑。

画ROC曲线

假设现在有四个样本 {(x1,0),(x2,0),(x3,1),(x4,1)} 。现在有分类器C对四个实例进行预测,按类别为正例的得分排序,得到下表:

实例 得分
x1 10
x3 8
x4 6
x2 4


  • 首先取阈值为10,把 x1 预测为正例,剩下三个预测为反例,得到混淆矩阵:
  预测为P 预测为N
实际为P 0 2
实际为N 1 1

得到 TPR=0,FPR=0.5 ,在ROC空间中确定一点。

  • 接着取阈值为8,把 x1,x3 预测为正例,剩下两个预测为反例,得到混淆矩阵:
  预测为P 预测为N
实际为P 1 1
实际为N 1 1

得到 TPR=0.5,FPR=0.5

  • 接着取阈值为6,把 x1,x3,x4 预测为正例, x2 预测为反例,得到混淆矩阵:
  预测为P 预测为N
实际为P 2 0
实际为N 1 1

得到 TPR=1,FPR=0.5

  • 接着取阈值为6,把 x1,x3,x4,x2 预测为正例,得到混淆矩阵:
  预测为P 预测为N
实际为P 2 0
实际为N 2 0

得到 TPR=1,FPR=1

经过上面步骤,得到ROC曲线(从坐标原点出发):

西瓜书《机器学习》阅读笔记3——Chapter2_ROC曲线

上面得到m个混淆矩阵的过程非常繁琐,但其实完全没必要。另一种更简单的实际操作是:横坐标每格刻度为 1m ,纵坐标每格刻度为 1m+ ;现在从 (0,0) 出发,按照实例排序结果依次遍历,每次遇到实际为正例的实例,向上走一格;每次遇到实际为反例的实例,向右走一格。

建议自己举个例子,动手画一画,加深理解。

多个实例概率/得分相同

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

对这10个实例采用不同的具体排序方式,ROC路线是不一样的(红色点代表排在这10个实例之前的那个实例):
西瓜书《机器学习》阅读笔记3——Chapter2_ROC曲线

上图中对应两种排序方式:把所有正例排在前面;把所有反例排在前面。对于其他混合排序的情况,其路线都落在这个矩形内部。ROC曲线应该表示分类器的期望性能,也就是对角线。

AUC

在两个分类器的ROC曲线交叉的情况下,无法判断哪个分类器性能更好,这时可以计算曲线下面积AUC,作为性能度量。
现在得到分类器的ROC曲线了,怎么计算AUC呢?
西瓜书《机器学习》阅读笔记3——Chapter2_ROC曲线


ROC曲线下方由矩形和梯形组成,很容易通过以下公式计算AUC:

AUC=i=2m(xixi1)(yi+yi1)2(1)

AUC有一个很好的性质:一个分类器的AUC等于这个分类器将一个随机选取的正例排在一个随机选取的反例前面的概率

至于P35页提到的公式(2.22),在本章的习题解答中会给予证明。

iso-performance直线

ROC曲线的一个优点就是,它和测试样本的类别分布于与误分类代价无关,即无论测试样本的正反例比例如何变化、无论误分类代价如何变化,分类器的ROC曲线都是不变的。一个指定的(类别分布,误分类代价)称为一个operating condition。
假设现在指定测试样本中正例所占比例为 p(+) ,反例所占比例为 p() ,有 p()=1p(+) 。另外,误分类代价 C(+|) C(|+) ,分别表示实际为反例但预测成正例的代价和实际为正例但预测成反例的代价。这样得到一个operating condition,根据这个operating condition我们可以通过以下公式计算出一个值:

S=p()C(+|)p(+)C(|+)(2)

S 为斜率,在ROC空间上通过平移可以得到很多条直线,称为iso-performance直线。每条直线上的所有点对应的分类器有相同的期望代价;并且越靠近左上角的iso-performance直线,对应的分类器性能越好。

参考

[1] An introduction to ROC analysis. Tom Fawcett. 2006.