精确率 , 召回率, ROC曲线, AUC 知识汇总

时间:2022-12-07 00:07:49
精确率(Precision) , 召回率(Recall), ROC曲线(receiver operating characteristic ), AUC (Area Under roc Curve )


准确率(accuracy),精确率(Precision),召回率(Recall)

    准确率(accuracy),精确率(Precision)和召回率(Recall)[1]  是信息检索,人工智能,和搜索引擎的设计中很重要的几个概念和指标。中文中这几个评价指标翻译各有不同,所以一般情况下推荐使用英文。

概念介绍

    先假定一个具体场景作为例子。
    假如某个班级有男生80人,女生20人,共计100人.目标是找出所有女生. 某人挑选出50个人,其中20人是女生,另外还错误的把30个男生也当作女生挑选出来了.作为评估者的你需要来评估(evaluation)下他的工作
    首先我们可以计算准确率(accuracy),其定义是: 对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。也就是损失函数是0-1损失时测试数据集上的准确率[2]  .
    这样说听起来有点抽象,简单说就是,前面的场景中,实际情况是那个班级有男的和女的两类,某人(也就是定义中所说的分类器)他又把班级中的人分为男女两类。accuracy需要得到的是此君 分正确的人总人数的比例。很容易,我们可以得到:他把其中70(20女+50男)人判定正确了,而总人数是100人,所以它的accuracy就是70 %(70 / 100).
    由准确率,我们的确可以在一些场合,从某种意义上得到一个分类器是否有效,但它并不总是能有效的评价一个分类器的工作。举个例子,google抓取了argcv 100个页面,而它索引*有10,000,000个页面,随机抽一个页面,分类下,这是不是argcv的页面呢?如果以accuracy来判断我的工作,那我会把所有的页面都判断为"不是argcv的页面",因为我这样效率非常高(return false,一句话),而accuracy已经到了99.999%(9,999,900/10,000,000),完爆其它很多分类器辛辛苦苦算的值,而我这个算法显然不是需求期待的,那怎么解决呢?这就是precision,recall和f1-measure出场的时间了.
    在说precision,recall和f1-measure之前,我们需要先需要定义TP,FN,FP,TN四种分类情况.
按照前面例子,我们需要从一个班级中的人中寻找所有 女生,如果把这个任务当成一个分类器的话,那么女生就是我们需要的,而男生不是,所以我们称女生为"正类",而男生为"负类".

相关(Relevant),正类 无关(NonRelevant),负类
被检索到(Retrieved) true positives(TP 正类判定为正类,例子中就是正确的判定"这位是女生") false positives(FP 负类判定为正类,"存伪",例子中就是分明是男生却判断为女生,当下伪娘横行,这个错常有人犯)
未被检索到(Not Retrieved) false negatives(FN 正类判定为负类,"去真",例子中就是,分明是女生,这哥们却判断为男生--梁山伯同学犯的错就是这个) true negatives(TN 负类判定为负类,也就是一个男生被判断为男生,像我这样的纯爷们一准儿就会在此处)
    
通过这张表,我们可以很容易得到例子中这几个分类的值:TP=20,FP=30,FN=0,TN=50.
    精确率(precision)的公式是
     精确率 , 召回率, ROC曲线, AUC 知识汇总
   
    它计算的是所有被检索到的item(TP+FP)中,"应该被检索到的item(TP)”占的比例。
在例子中就是希望知道此君得到的所有人中,正确的人(也就是女生)占有的比例.所以其precision也就是40%(20女生/(20女生+30误判为女生的男生)).
    召回率(recall)的公式是
     精确率 , 召回率, ROC曲线, AUC 知识汇总
   
    它计算的是所有检索到的item(TP)占所有"应该被检索到的item(TP+FN)"的比例。
在例子中就是希望知道此君得到的女生占本班中所有女生的比例,所以其recall也就是100%(20女生/(20女生+ 0 误判为男生的女生))

“精确率”与“召回率”的关系

    “精确率”与“召回率”虽然没有必然的关系(从上面公式中可以看到),然而在大规模数据集合中,这两个指标却是相互制约的。[3]  
    由于“检索策略”并不完美,希望更多相关的文档被检索到时,放宽“检索策略”时,往往也会伴随出现一些不相关的结果,从而使准确率受到影响。
    而希望去除检索结果中的不相关文档时,务必要将“检索策略”定的更加严格,这样也会使有一些相关的文档不再能被检索到,从而使召回率受到影响。
    凡是涉及到大规模数据集合的检索和选取,都涉及到“召回率”和“精确率”这两个指标。而由于两个指标相互制约,我们通常也会根据需要为“检索策略”选择一个合适的度,不能太严格也不能太松,寻求在召回率和精确率中间的一个平衡点。这个平衡点由具体需求决定。

    于是就需要F1-Measure这个根据准确率Precision和召回率Recall二者给出的一个综合的评价指标了。

F1-Measure 

    F-Measure又称为F-Score,是IR(信息检索)领域的常用的一个评价标准,计算公式为:
     精确率 , 召回率, ROC曲线, AUC 知识汇总
    其中 精确率 , 召回率, ROC曲线, AUC 知识汇总是参数,P是 精确率 (Precision),R是 召回率 (Recall)。[4]  
    当参数 精确率 , 召回率, ROC曲线, AUC 知识汇总=1时,就是最常见的F1-Measure了:
     精确率 , 召回率, ROC曲线, AUC 知识汇总
    其推导其实也很简单。
    定义:
    
     精确率 , 召回率, ROC曲线, AUC 知识汇总
    可得:
     精确率 , 召回率, ROC曲线, AUC 知识汇总
    由以上公式可见:

    P精确率(Precision)与R召回率(Recall) 任何一个太大或太小都会造成F1较小,所以只有P,R两者都较大的时候才能获得较大的F1。

ROC曲线

    受试者工作特征曲线 (receiver operating characteristic curve,简称ROC曲线),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以虚报概率为横轴,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线。
   
    ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真阳性率(灵敏度)为纵坐标,假阳性率(1-特异度)为横坐标绘制的曲线。传统的诊断试验评价方法有一个共同的特点,必须将试验结果分为两类,再进行统计分析。ROC曲线的评价方法与传统的评价方法不同,无须此限制,而是根据实际情况,允许有中间状态,可以把试验结果划分为多个有序分类,如正常、大致正常、可疑、大致异常和异常五个等级再进行统计分析。因此,ROC曲线评价方法适用的范围更为广泛。[5]  

举例

    考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被 预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(False positive)。相应地,如果实例是负类被预测成负类,称之为真负类(True negative),正类被预测成负类则为假负类(false negative)。
    列联表如下表所示,1代表正类,0代表负类。
   
预测
   
   
1
合计
实际
1
True Positive(TP)
False Negative(FN)
Actual Positive(TP+FN)
 
False Positive(FP)
True Negative(TN)
Actual Negative(FP+TN)
合计
 
Predicted Positive(TP+FP)
Predicted Negative(FN+TN)
TP+FP+FN+TN
    从列联表引入两个新名词。其一是真正类率(true positive rate ,TPR), 计算公式为 TPR=TP/ ( TPFN),刻画的是分类器所识别出的 正实例占所有正实例的比例。另外一个是假正类率(false positive rate, FPR),计算公式为 FPR= FP / (FP + TN),计算的是分类器错认为正类的负实例占所有负实例的比例。还有一个真负类率(True Negative Rate,TNR),也称为specificity,计算公式为TNR= TN/ ( FPTN) = 1 -  FPR
    在一个二分类模型中,对于所得到的连续结果,假设已确定一个阀值,比如说 0.6,大于这个值的实例划归为正类,小于这个值则划到负类中。如果减小阀值,减到0.5,固然能识别出更多的正类,也就是提高了识别出的正例占所有正例的比例,即TPR,但同时也将更多的负实例当作了正实例,即提高了FPR。为了形象化这一变化,在此引入ROC。
    Receiver Operating Characteristic,翻译为"接受者操作特性曲线",够拗口的。曲线由两个变量1-specificity 和 Sensitivity绘制. 1-specificity=FPR,即负正类率。Sensitivity即是真正类率,TPR(True positive rate),反映了正类覆盖程度。这个组合以1-specificity对sensitivity,即是以代价(costs)对收益(benefits)。
    下表是一个逻辑回归得到的结果。将得到的实数值按大到小划分成10个个数 相同的部分。
Percentile
实例数
正例数
1-特异度(%)
敏感度(%)
10
6180
4879
2.73
34.64
20
6180
2804
9.80
54.55
30
6180
2165
18.22
69.92
40
6180
1506
28.01
80.62
50
6180
987
38.90
87.62
60
6180
529
50.74
91.38
70
6180
365
62.93
93.97
80
6180
294
75.26
96.06
90
6180
297
87.59
98.17
100
6177
258
100.00
100.00

    其正例数为此部分里实际的正类数。也就是说,将逻辑回归得到的结 果按从大到小排列,倘若以前10%的数值作为阀值,即将前10%的实例都划归为正类,6180个。其中,正确的个数为4879个,占所有正类的 4879/14084*100%=34.64%,即敏感度;另外,有6180-4879=1301个负实例被错划为正类,占所有负类的1301 /47713*100%=2.73%,即1-特异度。以这两组值分别作为x值和y值,在excel中作散点图。得到ROC曲线如下
精确率 , 召回率, ROC曲线, AUC 知识汇总

AUC (Area Under roc Curve )

    用ROC curve来表示分类器的performance很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的performance。

    计算ROC curve的AUC值的代码可以在这找到。

[参考]:

[1]. 准确率(accuracy),精确率(Precision),召回率(Recall)和F1-Measure  .argcv .2013-1-15 [引用日期2014-05-3] .

[2].  李航 .统计学习方法 .北京 :清华大学出版社 ,2012 .

[3].  召回率与准确率  .博客园 [引用日期2013-04-15] .

[4].  Evaluation of clustering  .斯坦福大学自然语言处理实验室网站 [引用日期2013-04-20] .

[5].  ROC曲线(受试者工作特征曲线)分析详解  .

[6].     http://baike.baidu.com/view/5615830.htm  百度百科 精确率,召回率定义

[7].     http://baike.baidu.com/view/42249.htm 百度百科 ROC曲线定义

[8].     http://blog.sciencenet.cn/blog-454498-546131.html AUC 定义