ROC曲线介绍

ROC曲线是用来评估不同二分类算法性能的,其最早源于军事领域,后来逐渐应用于医学、心理学等领域。在机器学习领域内,ROC曲线可视为混淆矩阵的改良版:通过不断调整阈值,从而给出不同版本的混淆矩阵,然后连点成线。

ROC曲线的来源:

据说在第二次世界大战期间,ROC曲线最先是由战线前沿的电子工程师和雷达工程师联合发明的。雷达兵的任务很简单,就是盯着雷达显示屏,查看是否有敌机来袭(显然,有敌机和没有敌机是一个典型的二分类问题)。理论上,只要敌机来袭,雷达就会检测出相应的信号。

但是,捣蛋分子---各种高空飞鸟也会来凑热闹。当它们出现在雷达扫描区时,雷达屏幕同样也会显示异物来袭的信号。这时,考验雷达兵的时刻就到了。

如果但凡有信号,就认为是敌机来袭,这显然会增加误报率,相反,如果将所有的信号都认为是飞鸟,则会增加漏报率。每个雷达兵都可视为一个判断“敌机是否来袭”的分类器,于是问题演化为,如何挑选性能卓越的分类器?

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

(横坐标)FPR=FP/N,其中N为真实的负类样本数量,是FP和TN的和,见如下的二分类混淆矩阵。在雷达兵例子中,表示飞鸟的数量(即非敌机)

(纵坐标)TPR=TP/P,其中P为真实的正类样本数量,是TP和FN的和,见如下的二分类混淆矩阵。在雷达兵例子中,表示敌机的数量。

 假设雷达兵检测到10个外物来袭的信号,其中有4个确实是敌机,即P=4,另外6个是飞鸟,即N=6。现在假设某个雷达兵对这10个信号进行判断,判断为3个为敌机,7个为飞鸟。而这3个敌机中有1个实际为飞鸟,但被误判为敌机,即FP=1,故假阳性率FPR=FP/N=1/6。在这3个敌机中确实有2个是敌机,即TP=2,而实际上N=4,故该雷达兵的真阳性率TPR=TP/P=2/4。如果把这个雷达兵看作一个分类器的话,那么他在ROC曲线上的坐标点应该是(1/6,2/4)。

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

很多分类器仅仅会输出一个分类概率,这时可以给定一个截断点(或者说阈值概率),如果分类概率大于这个阈值概率,就判断样本为正类样本,否则为负类样本。对于一个已经排序的分类概率,不断移动分类器的“阈值概率”就会生成曲线上的一系列关键点(FPR,TPR)。这些关键点来连接起来恰好就是一条曲线,即为ROC曲线。

参考:

Python极简讲义:一本书入门数据分析与机器学习

猜你喜欢

转载自blog.csdn.net/u011375991/article/details/131890504
今日推荐