受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以虚报概率为横轴,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线。
ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。
一,简介
对训练出的分类器的分类效果的评估,常见有精确度(accuracy),PR(precision- recall), precision等,一般来说训练样本数量越大,则的储的
用的就是分类器的精确度(accuracy),在某些如推荐或信息获取领域还会组合使用precision-recall作为评价指标。因为 你用于训练分类器的样本本身就是总体的一个抽样,所以这些指标的数值也仅仅是一种统计上的反映,如果你做多次抽样训练,跟别的随机变量一样,它一样会有期 望、方差、置信区间这些概念。理论上说,训练样本量越大,你得到的这些指标的可信度就越高(即它们以某个概率落在的置信区间越窄)。不幸的是,实际中你未 必会有那么多的样本,所以机器学习工作者设计出很多种方法来应对数据量不足情况下分类器的训练与评估,如k步交叉检验、留1法、boostrap等等
分类、检索中评价的指标比较多,precision,recall,accuracy,F1,ROC,PRcurve
二,ROC介绍
很多时候,我们希望对一个二值分类器的性能进行评价,AUC正是这样一种用来度量分类模型好坏的一个标准。现实中样本在不同类别上的不均衡分布(class distribution imbalance problem),使得accuracy这样的传统的度量标准不能恰当的反应分类器的性能。举个例子:测试样本中有A类样本90个,B 类样本10个。若某个分类器简单的将所有样本都划分成A类,那么在这个测试样本中,它的准确率仍为90%,这显示是不合理的。为了解决上述问题,人们从医疗分析领域引入了一种新的分类模型performance评判方法——ROC分析。在介绍ROC之前,首先讨论一下混淆矩阵(Confusion matrix)。
混淆矩阵是监督学习中的一种可视化工具,主要用于比较分类结果和实例的真实信息(outcom vs. ground truth)。矩阵中的每一行代表实例的预测类别,每一列代表实例的真实类别。在混淆矩阵中,每一个实例可以划分为四种类型之一,True Positive\False Positive\False Negative\True Negetive(TP\FP\FN\TN),如图1所示。其中,Positive代表预测实例来自正类,Negetive代表预测实例来自负类;True代表预测正确,False代表预测错误。
由混淆矩阵可以计算一系列的评价指标,如accurancy、precision、recall等等。
fp rate = FP/N tp rate = TP/P
precision = TP/(TP + FN) recall = TP/P
accuracy = (TP + TN) / (P + N)
F-measure = 2/( 1/precision + 1/recall)
几个参数的解释:
precision和recall是从信息检索来的定义,
precision为查准率-----指得是检测的相关文献量与检出文献总量的比率,是衡量信息检索系统检出文献的准确 度的尺度。
recall 为查全率------检测出的相关文献量与检索系统中相关文献总量的比率,是衡量信息检索系统检出相关文 献能力的尺度。
可以通过一个例子来解释
一个7类的混淆矩阵,每类样本数量为100
confus =
69 2 4 6 1 14 4
3 70 6 2 7 6 6
4 6 66 2 5 6 11
2 2 18 51 9 12 6
4 8 1 2 80 3 2
7 6 3 7 2 67 8
11 6 7 5 7 6 58
accuracy = 0.6586
numcorrect = 461
precision =0.6900 0.7000 0.6286 0.6800 0.7207 0.5877 0.6105
recall =0.6900 0.7000 0.6600 0.5100 0.8000 0.6700 0.5800
F =0.6900 0.7000 0.6439 0.5829 0.7583 0.6262 0.5949
confus矩阵中每一行和等于该类的样本和=100;但是每一列就不是100了,每一列其实的意义,就是信息检索的返回的所有结果。
假设我们用类别3的标签进行搜索,那么会返回confus中第3列的所有数据,没问题吧?因为分到第3类的确实是这些数据,一共有105个,因为有其他的类也分到这个类中了呗。
所以第三类的查准率=检索出的相关文档数目(66)/检索返回的所有的文档数目(105)=0.6288=precision(3)。
查全率那就是检索出的文档数目(66)/数据库中的第三类的所有文档数目(检索出的第三类+没有检索出的第三类=confus第三行的和=100)=0.66=recall(3)。
三,ROC原理介绍
回到ROC上来, 百度百科对roc的解释如下:ROC曲线指受试者工作特征曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性和特异性的相互关系,它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性,再以敏感性为纵坐标、(1-特异性)为横坐标绘制成曲线,曲线下面积越大(AUC area under roc curve),诊断准确性越高。在ROC曲线上,最靠近坐标图左上方的点为敏感性和特异性均较高的临界值。
ROC关注两个指标:
true positive rate ( TPR = TP / [TP + FN] ) ------正例分对的概率
false positive rate ( FPR = FP / [FP + TN] ) ------负例错分的概率
直观上,TPR代表能将正例分对的概率,FPR代表将负例错分为正例的概率,FPR 预测的是正例,但是实际上是负例。这部分在负例中占得比例。也就是将负例错分为正例的概率。
在ROC 空间中,每个点的横坐标是FPR,纵坐标是TPR,这也就描绘了分类器在TP(真正的正例)和FP(错误的正例)间的trade-off。ROC的主要分析工具是一个画在ROC空间的曲线——ROC curve。我们知道,对于二值分类问题,实例的值往往是连续值,我们通过设定一个阈值,将实例分类到正类或者负类(比如大于阈值划分为正类)。因此我们可以变化阈值,根据不同的阈值进行分类,根据分类结果计算得到ROC空间中相应的点,连接这些点就形成ROC curve。ROC curve经过(0,0)(1,1),实际上(0, 0)和(1, 1)连线形成的ROC curve实际上代表的是一个随机分类器。一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。如图2所示。
四,AUC介绍
用ROC curve来表示分类器的performance很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的performance。
计算ROC curve的AUC值的代码可以在这找到。
五,ROC中最优P-0的计算
p_0为一个阈值,通过这个阈值来分类,保证TPR同时代价要比FPR尽量小,具体操作再去查看论文吧,
六,Precision-Recall Corve曲线的画法
不过Precision-Recall Corve对于每一类的画法还是很有讲究的,我们知道对于二类问题,像是检索中的问题,最后的查全率、查准率基本都是最后计算一对值就行了,但是就一对值,一个点是画不出曲线来的,所以在实际的曲线过程中,是这样的:
1、首先得分为正负两类,多类问题真对每一类都可以映射过去
2、按照决策值(分类问题每一个样本肯定会有一个支持分类的概率或者置信度等等,像是libsvm的dec_values的矩阵),按照从小到大的顺序进行排序
3、然后分别计算全部样本、全本样本-1、全部样本-2、...........、一直计算完毕,每一次都会有查全率查准率,就可以曲线了,这里我说的很粗糙,详细的可以查看我的代码,当然也有函数参考的别人的,也做了说明。