什么是ROC曲线

ROC曲线是Receiver Operation Characteristic Curve的简称,中文名为“受试者工作特征曲线”。ROC曲线的横坐标的假阳性率(False Positive Rate,FPR);纵坐标为真阳性率(True Positive Rate,TPR)。FPR和TPR的计算方法分别为
模型评估--ROC曲线 - 图1
上式中,P是真实的正样本的数量,N是真实的负样本的数量,TP是P个正样本中被分类器预测为正样本的个数,FP是N个负样本中被分类器预测为正样本的个数。

如何绘制ROC曲线

在二值分类问题中,模型的输出一般都是预测样本为正例的概率。假设测试集中有20个样本,样本按照预测概率从高到低排序。在输出最终的正例、负例之前,我们需要指定一个阈值,预测概率大于该阈值的样本会被判为正例,小于该阈值的样本则会被判为负例。

样本序号 真实标签 模型输出概率
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.30
20 n 0.1

image.png

如何计算AUC

AUC指的是ROC曲线下的面积大小,该值能够量化地反映基于ROC曲线衡量出的模型性能。计算AUC值只需要沿着ROC横轴做积分就可以了。由于ROC曲线一般都处于y=x这条直线的上方(如果不是的话,只要把模型预测的概率反转成1−p就可以得到一个更好的分类器),所以AUC的取值一般在0.5~1之间。AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。

  1. import numpy as np
  2. from sklearn.metrics import roc_auc_score
  3. y_true = np.array([0, 0, 1, 1])
  4. y_scores = np.array([0.1, 0.4, 0.35, 0.8])
  5. roc_auc_score(y_true, y_scores)

ROC曲线相比P-R曲线有什么特点

相比P-R曲线,ROC曲线有一个特点,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变,而P-R曲线的形状一般会发生较剧烈的变化。
image.png