ROC曲线

什么是ROC曲线?

ROC曲线经常作为评估二分类的重要指标,其起源于军事领域,全称叫做receiver operating characteristic curve。

ROC曲线是二维平面内的曲线,其横坐标为假阳性率(FPR),纵坐标为真阳性率(TPR)他们的计算方法如下:

瞎聊机器学习——PR曲线、ROC曲线、AUC_P-R曲线

瞎聊机器学习——PR曲线、ROC曲线、AUC_召回率_02

上式中:

  • P:真实的正样本的数量
  • N:真实的负样本的数量
  • TP:P个正样本中被分类器预测为正样本的个数
  • FP:N个负样本中被分类器预测为正样本的个数

举个例子:

假设有10个人疑似感冒了,其中有3人确实是感冒了(P=3),另外的7个人没有感冒(N=7)。医院对这10位患者做了诊断,诊断出3个感冒的人,其中有2个人确实是感冒了(TP=2)。那么真阳性率

。对于7位没感冒的人来说,有一位被误诊为感冒(FP=1),那么假阳性率


对于上述的分类结果也就对应着ROC曲线上的一个点(1/7,2/3)

如何绘制ROC曲线?

我们可以经过计算得到ROC曲线上的一个点,那么怎么去绘制这条曲线呢?

ROC曲线实际上是通过不断的移动分类器的截断点来生成曲线上的关键点的。

我们首先要对样本的预测概率从高到低进行排序,在输出最终的正例、负例之前我们需要指定一个阈值,预测概率大于该阈值的样本会被判为正例,小于该阈值的样本会被判为负例。

举个例子:

二分类输出结果样例

样本序号

真实标签

输出概率

1

p

0.9

2

p

0.8

3

n

0.7

4

p

0.6

5

p

0.55

6

p

0.54

7

n

0.53

8

n

0.52

9

p

0.51

10

n

0.505

11

p

0.4

12

n

0.39

13

p

0.38

14

n

0.37

15

n

0.36

16

n

0.35

17

p

0.34

18

n

0.33

19

p

0.3

20

n

0.1

 

就本例来说,当截断点选择为正无穷时,模型把全部样本预测为负例,那么FP和TP必然都为0,FPR和TPR也都为0,因此曲线的第一个点的坐标就是 (0,0)。当把截断点调整为0.9时,模型预测1号样本为正样本,并且该样本确实 是正样本,因此,TP=1,20个样本中,所有正例数量为P=10, 故TPR=TP/P=1/10;这里没有预测错的正样本,即FP=0,负样本总数N=10, 故FPR=FP/N=0/10=0,对应ROC曲线上的点(0,0.1)。依次调整截断点,直到画出全部的关键点,再连接关键点即得到最终的ROC曲线,如下图所示:

瞎聊机器学习——PR曲线、ROC曲线、AUC_ROC_03

AUC(Area Under Curve,ROC曲线下方的面积大小)

说完了绘制ROC曲线,那么如何来计算AUC呢?

根据名称我们就可以知道,AUC就是在计算ROC曲线下方的面积,该值能够量化的反映基于ROC曲线衡量出的模型性能。由于ROC的曲线一般都处于Y=X这条直线的上方(若果不是的化把概率反转变成1-p即可成为更好的分类器),所以AUC的取值一般在0.5-1之间。AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。

P-R曲线(Precision-Recall)

P-R曲线的存在是为了进行精确率和召回率的衡量,P-R曲线顾名思义P就代表精确率而R就是召回率,在P-R曲线中横轴是召回率,纵轴是精确率。对于一个排序模型来说,其P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本, 小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率,整条P-R 曲线是通过将阈值从高到低移动而生成的。下图中,其中实线代表 模型A的P-R曲线,虚线代表模型B的P-R曲线。原点附近代表当阈值最大时模型的 精确率和召回率。

瞎聊机器学习——PR曲线、ROC曲线、AUC_召回率_04

由图可见,当召回率接近于0时,模型A的精确率为0.9,模型B的精确率是1, 这说明模型B得分前几位的样本全部是真正的正样本,而模型A即使得分最高的几 个样本也存在预测错误的情况。并且,随着召回率的增加,精确率整体呈下降趋 势。但是,当召回率为1时,模型A的精确率反而超过了模型B。这充分说明,只用 某个点对应的精确率和召回率是不能全面地衡量模型的性能,只有通过P-R曲线的 整体表现,才能够对模型进行更为全面的评估。