首页 > Python机器学习 阅读数:25

ROC曲线是什么

与 P-R 曲线相比,ROC 曲线则有更多的优点。下面就来讨论一下 ROC 曲线,以及与其密切相关的 AUC。

ROC曲线

ROC 曲线是英文“receiver operating characteristic curve”的简称,对应的中文含义是“受试者工作特征曲线”。从它略显古怪的名称可以看出,该曲线一开始并非为机器学习领域而设计的。ROC 曲线最早源于军事领域,后来逐渐应用于医学、心理学等领域。在机器学习领域内,ROC 曲线可视为混淆矩阵的改良版:通过不断调整阈值,从而给出不同版本的混淆矩阵,然后“连点成线”。

我们先追根溯源,看看 ROC 曲线是怎么来的,这样就能更加深刻地认识它的用途。据说在第二次世界大战期间,ROC 曲线最先是由战线前沿的电子工程师和雷达工程师联合发明的。雷达兵的任务很明确,就是盯着雷达显示屏,查看是否有敌机来袭(显然,有敌机和没有敌机是一个典型的二分类问题)。

理论上,只要敌机来袭,雷达就会检测出相应的信号。但是,捣蛋分子—各种高空飞鸟也会来凑热闹。当它们出现在雷达扫描区时,雷达屏幕同样也会显示异物来侵的信号。这时,考验雷达兵的时刻就到了。

如果但凡有信号就“草木皆兵”,确定敌机来袭,这显然会增加误报率。而如果将所有信号都认为是飞鸟,泰然处之,则会增加漏报率。每个恪尽职守的雷达兵都想竭尽所能提高敌机预报的准确率。但问题在于,有的雷达兵天性谨慎,倾向于误报;有的雷达兵天生草率,容易漏报。对于军方而言,该如何遴选出“靠谱”的雷达兵呢?

事实上,用机器学习的术语来说,每个雷达兵都可视为一个判断“敌机是否来袭”的分类器。于是问题就演化为,如何挑选性能卓越的分类器呢?最稳妥的办法还是用数据说话。

军方的电子工程师汇总了所有雷达兵的预报数据,特别是漏报和误报的概率,并把这些概率一一绘制到一个二维坐标系中。这个坐标系的纵坐标为敏感性(真阳性率,True Positive Rate,简称 TPR),它表示敌机真的来袭时雷达兵能够预报正确的概率。横坐标为特异性(假阳性率,False Positive Rate,简称 FPR),它表示非敌机来袭(如飞鸟飞过)时,雷达兵将其误判为敌机来袭的概率。

FPR 和 TPR 定义分别为:

FPR=FP/N
TPR=TP/P


N 为真实的负类样本数量,在《二分类和混淆矩阵》一节图 1 所示的混淆矩阵中,N 是 TN(真负类)和 FP(假正类)之和,FP 是负类样本中被分类器误判为正类样本的个数。

P 表示真实的正类样本数量。在《二分类和混淆矩阵》一节图 1 所示的混淆矩阵中,P 是 TP(真正类)和 FN(假负类)之和,TP 是正类样本中被分类器正确预测为正类样本的个数。

上面的定义理解起来有点抽象,下面举例说明。假设雷达兵检测到 10 个外物来袭的信号,其中有 4 个确实是敌机(P=4),另外 6 个是飞鸟(N=6)。现在假设某个雷达兵对这 10 个信号进行判断,判断有3个为敌机。而这 3 个敌机中有 1 个实际为飞鸟,但被误判为敌机(FP=1),飞鸟共触发 6 个警报信号,于是假阳性率 FPR=FP/N=1/6。

在这 3 个敌机判断中,有 2 个确实是敌机(即 TP=2),而实际共有 4 架敌机,那么该雷达兵的真阳性率 TPR=TP/P=2/4。如果把雷达兵看作一个分类器的话,那么他在 ROC 曲线上的坐标点应该是(1/6,2/4)。

事实上,ROC 曲线是通过不断移动分类器的“截断点”来生成曲线上一系列关键点的。下面我们来解释“截断点”。很多时候,我们在判断某个样本是正类样本还是负类样本时,并不能“斩钉截铁”地说它“是(100%)”或“不是(0%)”。

很多分类器(比如贝叶斯分类器、神经网络分类器)仅仅会输出一个分类概率,这时可以给定一个截断点(或说阈值概率),如果分类概率大于这个截断点就判断样本为是正类样本,否则就为负类样本。对于一个已经排序的分类概率,不断移动分类器的“截断点”就会生成曲线上的一系列关键点 (FPR,TPR)。这些关键点连接起来恰好就是一条曲线,它就是我们正在学习的 ROC 曲线(见图 1 )。

ROC曲线
图 1:ROC曲线

下面通过一个案例来进一步说明“截断点”的概念。假设测试集有 20 个样本(真实的正负类样本各 10 个),表 1 为二值分类器的输出结果(p 代表正类标签,n 代表负类标签)。

表1:二值分类器的输出结果(已排序)
样本编号 真实标签 模型输出概率 样本编号 真实标签 模型输出概率
1 p 0.9 11 p 0.4
2 p 0.8 12 n 0.39
3 n 0.7 13 p 0.38
4 p 0.6 14 n 0.37
5 p 0.55 15 n 0.36
6 p 0.54 16 n 0.35
7 n 0.53 17 p 0.34
8 n 0.52 18 n 0.33
9 p 0.51 19 p 0.30
10 n 0.505 20 n 0.10

下面来说明 ROC 曲线的绘制过程。当截断点选择正无穷(Infinity)时,分类模型会把所有样本全部判断为负类样本,那么 FP 和 TP 自然都是 0,于是 FPR 和 TPR 也都是 0,因此 ROC 曲线第一个点的坐标就是 (0,0)。

当把截断点(输出概率)定为 0.9 时,表 1 中只有排名第 1 的样本被分类器判定为正类样本,此时 TP=1。而这 20 个样本中有 10 个正类样本,即 P=10,所以 TPR=1/10=0.1。与此同时,在所有被判定为正类样本的样本中,没有被“冤枉”的假的正类样本,即 FP=0。而负类样本也有 10 个,即 N=10,所以 NPR=0/10=0。因此,ROC 曲线的第二个点的坐标为 (0,0.1)。

类似地,当把截断点定为 0.8 时,表 1 中只有前两位的样本被分类器判定为正类样本。因此,TP=2,TPR=2/10=0.2。与此同时,没有假的正类样本,即 FP=0,NPR=0/10=0。因此,曲线的第三个点的坐标为 (0,0.2)。

以此类推,当不断调整截断点时,就能画出所有关键点,再连接这些关键点,就构成了最终的 ROC 曲线,曲线最终停留在 (1,1) 这个点上,如图 2 所示。如果这些关键点足够密集,图 2 所示的 ROC 曲线就不再是锯齿状的,而是光滑的曲线。

ROC曲线的绘制
图 2:ROC曲线的绘制

折腾半天,我们就介绍了 ROC 曲线的绘制。你可能会问,这 ROC 曲线到底有什么用呢?简单来说,ROC 曲线是用来评估不同二分类算法的性能的。那该如何评估某两个分类算法的优劣呢?这就要用到另一个概念 AUC 了。

AUC

AUC 是 Area Under Curve 的简称,顾名思义,它表示的是“曲线下的面积”。这里的“曲线”就是我们前面提到的 ROC 曲线。AUC 就是 ROC 曲线下的面积总和,该值能够量化反映分类算法的性能。

计算 AUC 的值并不复杂,只需要沿着 ROC 曲线的横轴做积分(或累加求和)即可。通常,ROC 曲线都位于 y=x 这条线的上方(如果不是这样的,只需要把模型预测概率 P 反转成 1-P 能得到一个更好的分类器)。

因此,AUC 的取值范围一般是 0.5~1。通常来说,AUC 越大表明分类器性能越好,因为它可以把真正的正类样本排在前面,降低误判率。