本文主要是介绍准确率,召回率,mAP,ROC,AUC,特异性,敏感性,假阴性,假阳性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
P/R和ROC是两个不同的评价指标和计算方式,一般情况下,检索用准确率、召回率、F1、AP和mAP,分类、识别等用ROC和AUC(特异性和敏感性是ROC当中的一个部分)。
准确率、召回率、F1、AP和mAP这几个指标需要依次看,不然直接看AP和mAP看不明白。而ROC和AUC可以直接看不需要看前面的指标。
PR曲线和ROC曲线上点都是对预测的数据进行划分,首先都是按照置信度排序,而PR是一个个数据统计过去得到当前点的Precision和Recall,ROC是前百分比被认定为正例后计算的敏感性和1-特异性。
AP:对于Recall >= 0, 0.14, 0.29, 0.43, 0.57, 0.71, 1,我们选取此时Percision的最大值:1, 1, 1, 0.5, 0.5, 0.5, 0。此时
Aeroplane
类别的 AP = (0.14-0)*1 + (0.29-0.14)*1 + (0.43-0.29)*0.5 + (0.57-0.43)*0.5 + (0.71-0.57)*0.5 + (1-0.71)*0 = 0.5AUC:
目录
准确率、召回率、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图"图。
额外补充一个检测的例子:
其实检测也很好理解,和例子二(分类)的例子有点像。具体这里就不展开介绍了,直接参考博客检测中的mAP的理解_mjiansun的专栏-CSDN博客_图像识别map
如果是做搜索,那就是保证召回的情况下提升准确率;如果做疾病监测、反垃圾,则是保准确率的条件下,提升召回。
图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的平均值。
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(TNR:true negative rate,描述识别出的负例占所有负例的比例,计算公式为:TNR= TN / (FP + TN) )。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(sklearn.metrics.roc_curve — scikit-learn 1.0 documentation)。
这里我是这样理解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的计算方式
AUC计算方法总结_mjiansun的专栏-CSDN博客
AUC计算工具:
AUCCalculator 0.2 - A Java program for finding AUC-ROC and AUC-PR
假阴性假阳性
假阳性率:得到了阳性结果,但这个阳性结果是假的。即在金标准判断无病(阴性)人群中,检测出为阳性的几率。(没病,但却检测结果说有病),为误诊率。 FPR=FP/N=FP/(FP+TN)=1-特异性
假阴性率:得到了阴性结果,但这个阴性结果是假的。即在金标准判断有病(阳性)人群中,检测出为阴性的几率。(有病,但却检测结果说没病),为漏诊率。FNR=FN/(TP+FN)=1-TPR
PR曲线和ROC曲线如何抉择问题
PR和ROC都是针对二分类设计的,所以使用多分类时,使用sigmoid函数作为最终的激活函数,单类的精确率和PR ROC是有对应关系的;但如果使用softmax,使用PR及ROC 与 精确率就存在了偏差,精确率是根据argmax的方式,而PR ROC是截断阈值的方式。
当TP,FP,FN都很小,TN很大时,适合选用PR曲线,曲线更为平滑。
当为了展示单个类别的指标时,适合选用PR曲线,能更好的展示该类别的好坏。
当2分类,既要关注阳性类别又要关注阴性类别时,适合选用ROC曲线,这样可以看出特异性和敏感性的变化,更能反应整个机器学习模型能力的好坏。
参考链接:
http://blog.csdn.net/wangzhiqing3/article/details/9058523
东海于吧环保科技有限公司
http://bubblexc.com/y2011/148/
信息检索的评价 - 百度文库
接受者操作特征曲线_百度百科
机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率 | Zhiwei's Blog
这篇关于准确率,召回率,mAP,ROC,AUC,特异性,敏感性,假阴性,假阳性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!