与 P-R 曲线相比,ROC 曲线则有更多的优点。下面就来讨论一下 ROC 曲线,以及与其密切相关的 AUC。
ROC曲线
ROC 曲线是英文”receiver operating characteristic curve”的简称,对应的中文含义是”受试者工作特征曲线”。从它略显古怪的名称可以看出,该曲线一开始并非为机器学习领域而设计的。ROC 曲线最早源于军事领域,后来逐渐应用于医学、心理学等领域。在机器学习领域内,ROC 曲线可视为混淆矩阵的改良版:通过不断调整阈值,从而给出不同版本的混淆矩阵,然后”连点成线”。
我们先追根溯源,看看 ROC 曲线是怎么来的,这样就能更加深刻地认识它的用途。据说在第二次世界大战期间,ROC 曲线最先是由战线前沿的电子工程师和雷达工程师联合发明的。雷达兵的任务很明确,就是盯着雷达显示屏,查看是否有敌机来袭(显然,有敌机和没有敌机是一个典型的二分类问题)。
理论上,只要敌机攻击,雷达就会探测到相应的信号。然而,麻烦制造者–各种高空鸟类也将加入派对。当它们出现在雷达扫描区域时,雷达屏幕也会显示异物到来的信号。此时,该是考验雷达兵的时候了。
[En]
In theory, as long as the enemy aircraft attack, the radar will detect the corresponding signal. However, troublemakers-all kinds of high-altitude birds will also join the party. When they appear in the radar scan area, the radar screen will also show the signal of foreign body coming. At this time, the time came to test the radar soldiers.
如果但凡有信号就”草木皆兵”,确定敌机来袭,这显然会增加误报率。而如果将所有信号都认为是飞鸟,泰然处之,则会增加漏报率。每个恪尽职守的雷达兵都想竭尽所能提高敌机预报的准确率。但问题在于,有的雷达兵天性谨慎,倾向于误报;有的雷达兵天生草率,容易漏报。对于军方而言,该如何遴选出”靠谱”的雷达兵呢?
事实上,用机器学习的术语来说,每个雷达兵都可视为一个判断”敌机是否来袭”的分类器。于是问题就演化为,如何挑选性能卓越的分类器呢?最稳妥的办法还是用数据说话。
军方的电子工程师汇总了所有雷达兵的预报数据,特别是漏报和误报的概率,并把这些概率一一绘制到一个二维坐标系中。这个坐标系的纵坐标为敏感性(真阳性率,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 | 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 越大表明分类器性能越好,因为它可以把真正的正类样本排在前面,降低误判率。
Original: https://blog.csdn.net/pythondby/article/details/121886706
Author: IT孔乙己
Title: ROC曲线是什么
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/166383/
转载文章受原作者版权保护。转载请注明原作者出处!