准确率,召回率,mAP,ROC,AUC,特异性,敏感性
P/R和ROC是两个不同的评价指标和计算方式,一般情况下,检索用准确率、召回率、F1、AP和mAP,分类、识别等用ROC和AUC(特异性和敏感性是ROC当中的一个部分)。
准确率、召回率、F1、AP和mAP这几个指标需要依次看,不然直接看AP和mAP看不明白。而ROC和AUC可以直接看不需要看前面的指标。
目录
准确率、召回率、F1
ROC和AUC
准确率、召回率、F1
信息检索、分类、识别、翻译等领域两个最基本指标是召回率(Recall Rate)和准确率(Precision Rate),召回率也叫查全率,准确率也叫查准率,概念公式:
召回率(Recall) = 系统检索到的相关文件 / 系统所有相关的文件总数
准确率(Precision) = 系统检索到的相关文件 / 系统所有检索到的文件总数
我对召回率和准确率的理解是:
准确率,相当于自己和自己比,我检索(预测)了100个内容,其中正真正确的只有80个,我的准确率就为80%;
召回率,相当于自己和别人(也就是真实值)比,我检索(预测)了100个内容,其中正真正确的只有80个,而相关(正确)的内容却有90个,我还有10个没有找到,那么我的召回率就是8/9 x 100%。
图示表示如下:
注意:准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。
这里“准确率高、召回率就低,召回率低、准确率高”这种情况,我是这么理解的。接下来有2个例子,例1不理解没关系(反正我胡诌的,手动笑哭),可以看看例2,例2是西瓜书上的例子。
例一:
假设你有1000万个相关内容,然后我规定一个检索条件,导致只检索到了500万个内容,但是真正相关的只有300万个内容,这是P1=300/500,R1=300/1000。我们从准确率P1可以看出检出的内容大概只有60%是正确的,按照正常的逻辑,我举例就要依据这个依据进行,而且随着逐渐逼近相关内容的总数,那么检索难度也会上升(就好比你做分类,你分对了99%,想让你进一步提升性能,你会发现很难,这就有点类似“越逼近真值,难度越大”),那么我接下来能检索出相关内容的准确率应该顶多就在60%附近(这里都是假设在极大范围内的数据内的测试,拥有一定的统计规律的前提下)。接下来我们放宽检索的条件,我们检索到了800万个内容,其中真正正确的大概率比480万小,我们不妨就选460万,那么这时P2=460/800,R2=470/1000,从结果可以看出P1>P2,R1<R2。
例二:
准确率和召回率是一对矛盾的度量.一般来说,准确率高时,召回率往往偏低;而召回率高时,准确率往往偏低.例如,若希望将好瓜尽可能多地选出来,则可通过增加选瓜的数量来实现,如果将所有西瓜都选上,那么所有的好瓜也必然都被选上了,但这样准确率就会较低;若希望选出的瓜中好瓜比例尽可能高,则可只挑选最有把握的瓜, 但这样就难免会漏掉不少好瓜,使得召回率较低.通常只有在一些简单任务中才可能使召回率和准确率都很高.
下面来看看P和R绘制的P-R曲线,也称P-R图。
咱们继续上面2个例子,并根据上面2个例子画图:
例一(检索):
有1000万个相关内容,然后算法A检索1万条内容,算一个P和R值,然后检索2万条内容,算一个P和R值,然后逐渐递增检索数量,不断计算P和R值,直到所有相关内容都被检索出来(当然不一定都能检索出来,画图也不需要都检索出来),这样就会有很多组P和R值,最后根据这些P和R值画出算法A的P-R曲线。然后算法B,算法C方法相同。
例二(分类):
在很多情形下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为"最可能 "是正例的样本,排在最后的则是学习器认为"最不可能"是正例的样本。按此顺序逐个把样本作为正例进行预测 ,则每次可以计算出当前的召回率、准确率。以准确率为纵轴、召回率为横轴作图 ,就得到了查准率-查全率曲线 ,简称 " P-R 曲 线"显示该曲线的图称为" P-R图"图。
额外补充一个检测的例子:
其实检测也很好理解,和例子二(分类)的例子有点像。具体这里就不展开介绍了,直接参考博客https://blog.****.net/u013066730/article/details/82707559
如果是做搜索,那就是保证召回的情况下提升准确率;如果做疾病监测、反垃圾,则是保准确率的条件下,提升召回。
图2.3中"平衡点 "(Break-Event Point , 简称 BEP)是"准确率=召回率"时的取值,如图2.3中学习器C的BEP是0.64 ,而基于BEP的比较,可认为学习器A优于B。但是BEP指标太简单了,所以需要一个更好的评价指标,这是就可以用F1来衡量。
公式基本上就是这样,但是如何算图1中的A、B、C、D呢?这需要人工标注,人工标注数据需要较多时间且枯燥,如果仅仅是做实验可以用用现成的语料。当然,还有一个办法,找个一个比较成熟的算法作为基准,用该算法的结果作为样本来进行比照,这个方法也有点问题,如果有现成的很好的算法,就不用再研究了。
AP和mAP(mean Average Precision),AP就是指PR曲线下方的面积,mAP指多个类别AP的平均值。
mAP是为解决P,R,F-measure的单点值局限性的。为了得到一个能够反映全局性能的指标,可以看考察下图,其中两条曲线(方块点与圆点)分布对应了两个检索系统的准确率-召回率曲线
可以看出,虽然两个系统的性能曲线有所交叠但是以圆点标示的系统的性能在绝大多数情况下要远好于用方块标示的系统。
从中我们可以发现一点,如果一个系统的性能较好,其曲线应当尽可能的向上突出。
更加具体的,曲线与坐标轴之间的面积应当越大。
最理想的系统, 其包含的面积应当是1,而所有系统的包含的面积都应当大于0。这就是用以评价信息检索系统的最常用性能指标,平均准确率mAP其规范的定义如下:(其中P,R分别为准确率与召回率)
ROC和AUC
ROC和AUC是评价分类器的指标(注意这一定是分类的指标,分类也就意味着数量的总量一定,假设总量为C,而分类就是对这C个数据进行分类,不会出现大于C或者小于C个数量的结果。而之前检索指标中“相关”的总数和“检索”的总数是可以不相等的),上面第一个图的ABCD仍然使用,只是需要稍微变换变成了TP,FP,FN,TN,这里的TP+FP+FN+TN应该就是数据总量C。下图的P,N分别是实际的正样本数量和负样本数量,而P',N‘是预测的正样本数量和负样本数量,P+N=P'+N‘=C,TP+FN=P,FP+TN=N,TP+FP=P',FN+TN=N',所以你要自己举例凑数字时,用好这个观念那么凑数字就不麻烦了。比方说P=90,N=10,P'=80,N'=20,这时TP可以取70~80中的任意一个整数,比方说TP=70,那么FP=10,FN=20,TN=0。
关于ROC和AUC注意一点:
分类也是可以用准确率和召回率指标的,不过只能是某一类的准确率或者召回率。要是想算总的准确率,就得先算每一类的准确率,然后将每一类的准确率求和,然后除以类别数。
ROC的全名叫做受试者工作特征曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,敏感性是TPR,特异性是指TNR。ROC是用构图法揭示敏感性和特异性的相互关系,它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性,再以敏感性为纵坐标、(1-特异性)为横坐标绘制成曲线,曲线下面积越大,诊断准确性越高。在ROC曲线上,最靠近坐标图左上方的点为敏感性和特异性均较高的临界值。
ROC关注两个指标
True Positive Rate ( TPR ) = TP / [ TP + FN] ,TPR代表能将正例分对的概率
False Positive Rate( FPR ) = FP / [ FP + TN] ,FPR代表将负例错分为正例的概率
在ROC 空间中,每个点的横坐标是FPR,纵坐标是TPR,这也就描绘了分类器在TP(真正的正例)和FP(错误的正例)间的trade-off。ROC的主要分析工具是一个画在ROC空间的曲线——ROC curve(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html)。
这里我是这样理解TPR和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 |
61797 |
4879 |
2.73 |
34.64 |
20 |
61797 |
2804 |
9.80 |
54.55 |
30 |
61797 |
2165 |
18.22 |
69.92 |
40 |
61797 |
1506 |
28.01 |
80.62 |
50 |
61797 |
987 |
38.90 |
87.62 |
60 |
61797 |
529 |
50.74 |
91.38 |
70 |
61797 |
365 |
62.93 |
93.97 |
80 |
61797 |
294 |
75.26 |
96.06 |
90 |
61797 |
297 |
87.59 |
98.17 |
100 |
61797 |
258 |
100.00 |
100.00 |
其正例数为此部分里实际的正类数。也就是说,将逻辑回归得到的结 果按从大到小排列,倘若以前10%的数值作为阈值,即将前10%的实例都划归为正类,6180个。其中,正确的个数为4879个,占所有正类的 4879/14084*100%=34.64%,即敏感度;另外,有6180-4879=1301个负实例被错划为正类,占所有负类的1301 /47713*100%=2.73%,即1-特异度。以这两组值分别作为y值(敏感度)和x值(1-特异度),在excel中作散点图。得到ROC曲线如下(红色曲线与数据无关其只是一个参考,蓝色曲线是ROC曲线):
用ROC curve来表示分类器的performance很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。
于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的Performance。
AUC计算工具:
http://mark.goadrich.com/programs/AUC/
参考链接:
http://blog.****.net/wangzhiqing3/article/details/9058523
http://www.vanjor.org/blog/2010/11/recall-precision/
http://bubblexc.com/y2011/148/
http://wenku.baidu.com/view/ef91f011cc7931b765ce15ec.html
https://baike.baidu.com/item/ROC%E6%9B%B2%E7%BA%BF/775606?fr=aladdin