基于实例数据详解准确率和召回率

2022年01月14日 阅读数:1
这篇文章主要向大家介绍基于实例数据详解准确率和召回率,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
摘要:信息检索、分类、识别、翻译等领域两个最基本指标是准确率(precision rate)和召回率(recall rate),准确率也叫查准率,召回率也叫查全率。

本文分享自华为云社区《准确率、召回率及AUC概念分析》,做者: savioyo。算法

信息检索、分类、识别、翻译等领域两个最基本指标是准确率(precision rate)和召回率(recall rate),准确率也叫查准率,召回率也叫查全率。这些概念很是重要的一个前提是针对特定的分类器和测试集的,即不一样的数据集也会致使不一样的结果。网络

  • True Positives,TP:预测为正样本,实际也为正样本的特征数
  • False Positives,FP:预测为正样本,实际为负样本的特征数(错预测为正样本了,因此叫False)
  • True Negatives,TN:预测为负样本,实际也为负样本的特征数
  • False Negatives,FN:预测为负样本,实际为正样本的特征数(错预测为负样本了,因此叫False)
  • TP+FP+FN+FN:特征总数(样本总数)
  • TP+FN:实际正样本数
  • FP+TN:实际负样本数
  • TP+FP:预测结果为正样本的总数
  • TN+FN:预测结果为负样本的总数

经过医生诊病的例子来理解和记忆。

假设下面的场景:工具

医生为病人看病,病人是否有病与医生是否正确诊断,两个条件两两组合就造成了四种可能性。测试

  • 病人有病而且被医生正确诊断,属于TP,即真阳性;
  • 病人有病而且被医生错误诊断,属于FN,即假阴性;
  • 病人无病而且被医生正确诊断,属于TN,即真阴性;
  • 病人无病而且被医生错误诊断,属于FP,即假阳性;

再举一个动做识别的例子。

假定测试集合为100条数据,其中90条数据被模型断定为驾车,10条数据被断定为步行。在被断定为驾车的90条数据中,有80条数据是被正确判断的,10条数据是被错误判断的;在被断定为步行的10条数据中,有6条数据是被正确判断的,4条数据是被错误判断的。那么,咱们将这四个数据填写到表格中。url

  • TP = 80; FP = 10
  • FN = 4; TN = 6

这些数据都是针对驾车这一个类别来分类的,也就是准确率和召回率是针对某一个特定的类别来讲的。
准确率的计算为 80 / (80 + 10) = 8/9,召回率的计算为80 / (80 + 4) = 20/21。spa

再举一个例子,这个例子是我最初用来理解准确率和召回率的例子,可是在我真正理解了准确率和召回率以后,这个例子反而具备了迷惑性。下面是网络上传的比较多的版本。.net

某池塘有1400条鲤鱼,300只虾,300只鳖。如今以捕鲤鱼为目的。撒一大网,逮着了700条鲤鱼,200只虾,100只鳖。那么,这些指标分别以下:翻译

正确率 = 700 / (700 + 200 + 100) = 70%orm

召回率 = 700 / 1400 = 50%blog

若是将池子里的全部的鲤鱼、虾和鳖都一网打尽,这些指标则变化为以下:

正确率 = 1400 / (1400 + 300 + 300) = 70%

召回率 = 1400 / 1400 = 100%

之因此说这个例子有迷惑性,是咱们应该用什么数据来填写上述的表格呢,也就是如何找到TP、FP、FN、TN呢?其实这个例子,有一些条件被默认了,或者被隐藏了,没有直接写出来。首先,这2000个生物是咱们的总体的测试集合,当咱们以鲤鱼为目的来进行分类时,将其中的1000个标记为鲤鱼类,剩余的1000个标记为非鲤鱼类,其中标记为鲤鱼类的1000个中,700个是被正确标记的,300个是被错误标记的;标记为非鲤鱼类的1000个中,700个是被错误标记的,300个是被正确标记的。其次,分类器是渔网开始捕捉时的行为,而不是已经捕捉完成以后的分类行为。

  • TP = 700; FP = 300
  • FN = 700; TN = 300

计算公式

准确率 = 系统检索到的相关文件/系统全部检索到的文件总数 (TP/(TP+FP))

召回率 = 系统检索到的相关文件/系统全部相关的文件总数 (TP/(TP+FN))

F值 = 准确率 * 召回率 * 2 / (正确率 + 召回率),F值即为正确率和召回率的调和平均值

准确率和召回率是互相影响的,理想状况下确定是作到二者都高,可是通常状况下准确率高、召回率就低;召回率高、准确率就低,固然若是二者都低,那是什么地方出问题了。通常状况下,用不一样的阈值(此处可认为是不一样的模型),统计出一组不一样阈值下的准确率和召回率,以下图:

若是是作搜索,那就是保证召回的状况下提高准确率;若是作疾病监测、反垃圾,则是保证准确率的条件下,提高召回。因此,若是在二者要求都高的状况下,能够用F值来衡量。

ROC&&AUC

ROC和AUC是评价分类器的指标,ROC的全名是Receiver Operating Characteristic。

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。咱们知道,对于二值分类问题,实例的值每每是连续值,咱们经过设定一个阈值,根据不一样的阈值进行分类,根据分类结果计算获得ROC空间中相应的点,链接这些点就造成ROC curve。ROC curve通过(0,0),(1,1),实际上(0,0),(1,1)连线造成的ROC curve实际上表明的是一个随机分类器。通常状况下,这个曲线都应该处于(0,0),(1,1)连线的上方。如图所示:

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

从Mann-Whitney U statistic的角度来解释,AUC就是从全部1样本中随机选取一个样本,从全部0样本中随机选取一个样本,而后根据你的分类器对两个随机样本进行预测,把1样本预测为1的几率为p1,把0预测为1的几率为p0,p1 > p0的几率就等于AUC。因此AUC反映的是分类器对样本的排序能力。根据这个解释,若是咱们彻底随机的对样本分类,那么AUC应该接近0.5。

AUC&&PR

一个分类算法,找个最优的分类效果,对应到ROC空间中的一个点。一般分类器的输出都是Score,好比SVM、神经网络,有以下的预测结果:

TABLE 通常分类器的结果都是Score表

True表示实际样本属性,Hyp表示预测结果样本属性,第4列便是Score,Hyp的结果一般是设定一个阈值,好比上表就是0.5,Score>0.5为正样本,小于0.5为负样本,这样只能算出一个ROC值,为更综合的评价算法的效果,经过取不一样的阈值,获得多个ROC空间的值,将这些值描绘出ROC空间的曲线,即为ROC曲线。

有了ROC曲线,更加具备参考意义的评价指标就有了,在ROC空间,算法绘制的ROC曲线越凸向左上方向效果越好,有时不一样分类算法的ROC曲线存在交叉,所以不少文章里用AUC(即Area Under Curve曲线下的面积)值做为算法好坏的评判标准。

与ROC曲线左上凸不一样的是,PR曲线是右上凸效果越好,下面是两种曲线凸向的简单比较:

做为衡量指标,选择ROC或PR都是能够的。可是参考资料显示,ROC和PR虽然具备相同的出发点,但并不必定能获得相同的结论,在写论文的时候也只能参考着别人已有的进行选择了。

 

点击关注,第一时间了解华为云新鲜技术~