2013年5月1日星期三

ROC曲线简介

一个典型的ROC曲线如下图所示:



基本概念



     一个分类模型(分类器)是一个将一个实例映射到一个特定类的过程。分类器的结果可以是一个实数(连续输出),这些分类器中类的边界必须通过一个阈值检测,举例来说,通过血压来检测一个人是否有高血压,或者它可以作为一个离散的标签表明的类。 让我们来考虑一个两类预测问题(双分类器),其结果要么是真(p)要么是假(n)。在双分类器中有4类可能的输出。如果输出的预测是p而真实的结果也是p,那么这就叫做真阳性(TP);然而如果真实的结果是n,则这就叫做假阳性(FP)。相反的来说,一个真阴性发生在预测结果和实际结果都为n的时候,而假阴性是当预测输出是n而实际值是p的时候。
为了得到一个现实世界中的恰当的例子,考虑一个检测一个人是否得一种病的测试。一个假阳性就是一个人被测试是有这种病的,但实际却没有的情况。一个假阴性就是一个人被测试是健康的,但实际却是得病的情况。 其多种情况可由以下矩阵表示:
真实值
pn全部
预测
输出
p'
阳性

阳性
P'
n'
阴性

阴性
N'
全部PN

ROC空间


要生成一个ROC曲线,只需要真阳性率(TPR)和假阳性率(FPR)。TPR决定了一个分类器或者一个诊断测试在所有阳性样本中能正确区分的阳性案例的性能。而FPR是决定了在所有阴性的样本中有多少假阳性的判断。 ROC空间将FPR和TPR定义为xy轴,这样就描述了真阳性(获利)和假阳性(成本)之间的博弈。而TPR就可以定义为灵敏度,而FPR就定义为(1-特异度),因此ROC曲线有时候也叫做"灵敏度和1-特异度"图像。每一个预测结果在ROC空间中以一个点代表。
最好的可能预测方式是一个在左上角的点,在ROC空间坐标轴(0,1)点,这个代表着100%灵敏(没有假阴性)和100%特异(没有假阳性)。而(0,1)点被称为完美分类器。一个完全随机预测会得到一条从左下到右上对角线(也叫无识别率线)上的一个点。一个最直观的随机预测的作决定的例子就是抛硬币。
这条斜线将ROC空间划分为两个区域,在这条线的以上的点代表了一个好的分类结果,而在这条线以下的点代表了差的分类结果。
让我们来看四个100个阳性和100个阴性的案例:
ABCC'
TP=63FP=2891
FN=37TN=72109
100100200
TP=77FP=77154
FN=23TN=2346
100100200
TP=24FP=88112
FN=76TN=1288
100100200
TP=76FP=1288
FN=24TN=88112
100100200
TPR = 0.63TPR = 0.77TPR = 0.24TPR = 0.76
FPR = 0.28FPR = 0.77FPR = 0.88FPR = 0.12
ACC = 0.68ACC = 0.50ACC = 0.18ACC = 0.82
图中给出了上面4个结果的ROC空间分布。A方式的结果是A,B,C中最好的一个。B的结果是一种随机猜测线(那条斜线),在表中我们可以看到B的精确度是50%。然而当将C作一个镜像后,C的结果甚至要比A还要好。这个作镜像的方法就是简单的不管C预测了什么,就做其预测的反面。离左上角越近的预测,其结果越好。或者说,离随机猜测线越远,则预测的结果越好,如果其点是在右下方的,那么只需作一个镜像即可。

ROC空间中的线



离散分类器,如决策树,产生的是离散的数值或者一个双标签。应用到实例中,这样的分类器最后只会在ROC空间产生单一的点。而一些其他的分类器,如朴素贝叶斯分类器,逻辑回归或者人工神经网络,产生的是实例属于某一类的可能性,对于这些方法,一个阈值就决定了ROC空间中点的位置。举例来说,如果可能值低于或者等于0.8这个阈值就将其认为是阳性的类,而其他的值被认为是阴性类。这样就可以通过画每一个阈值的ROC点来生成一个生成一条曲线。MedCalc是较好的ROC曲线分析软件。