基于实例数据详解准确率和召回率
摘要:信息检索、分类、识别、翻译等领域两个最基本指标是准确率(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条数据是被错误判断的。那么,我们将这四个数据填写到表格中。
- TP = 80; FP = 10
- FN = 4; TN = 6
这些数据都是针对驾车这一个类别来分类的,也就是准确率和召回率是针对某一个特定的类别来说的。
准确率的计算为 80 / (80 + 10) = 8/9,召回率的计算为80 / (80 + 4) = 20/21。
再举一个例子,这个例子是我最初用来理解准确率和召回率的例子,但是在我真正理解了准确率和召回率之后,这个例子反而具有了迷惑性。下面是网络上传的比较多的版本。
某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的。撒一大网,逮着了700条鲤鱼,200只虾,100只鳖。那么,这些指标分别如下:
正确率 = 700 / (700 + 200 + 100) = 70%
召回率 = 700 / 1400 = 50%
如果将池子里的所有的鲤鱼、虾和鳖都一网打尽,这些指标则变化为如下:
正确率 = 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虽然具有相同的出发点,但并不一定能得到相同的结论,在写论文的时候也只能参考着别人已有的进行选择了。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
工具 | 如何对 MySQL 进行 TPC-C 测试?
作者:丁源 RadonDB 测试负责人 负责 RadonDB 云数据库、容器化数据库的质量性能测试,迭代验证。对包括云数据库以及容器化数据库性能和高可用方案有深入研究。 |背景 根据 DWorks 2020 年发布的《中国自研数据库登顶 TPC-C 的意义》[1] 报告显示,大于 67.9% 的受访者表示在数据库选型时会参考 TPC-C 的测试结果。对用户来说,性能是数据库选型时最重要的指标之一。而 TPC-C 作为权威的测试基准,是一个能够直观反映软硬件性能的方式。 图片来源:2020 DWorks《中国自研数据库登顶 TPC-C 的意义》 |几个概念 一个协会 TPC(事务处理性能协会:Tracsaction Processing Performance Council),是一个大型非盈利的组织。TPC 主要制定了商务应用标准程序(Benchmark)的标准规范,性能和价格度量,并管理测试结果的发布。任何厂家或测试者都可以根据规范,执行标准性能测试。 一个标准 TPC-C 是在线事务处理(OLTP)的基准程序。专门针对联机事务处理系统(OLTP)的性能测试规范,其测试结果可为用户在...
- 下一篇
FabEdge V0.4 新特性:支持多集群通讯
边缘计算是指在靠近物或数据源头的⼀侧,采用网络、计算、存储、应用核心能力为⼀体的开放平台,就近提供最近端服务。其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务、应⽤智能、安全与隐私保护等方面的基本需求。边缘计算处于物理实体和⼯业连接之间,或处于物理实体的顶端。 根据计算能力大小,边缘计算可以分为两⼤类: 轻边缘:计算能力受限,网络条件差,业务单⼀,数量庞⼤,地理位置分散,⽐如智慧小区,车联网,无人机等。 重边缘:计算能力相对充足,网络条件相对稳定,业务复杂,可靠性,安全性有⼀定要求,比如5G MEC,工业互联网,智慧城市等。 FabEdge 是⼀个基于 kubernetes 构建的,专注于边缘计算场景的容器网络⽅案,解决了边缘计算场景下⽹络管理复杂,割裂互不通信,缺少拓扑感知能力,无法提供就近访问等问题,使能云边、边边之间的业务协同。FabEdge支持 KubeEdge,SuperEdge, OpenYurt 等边缘计算框架管理的轻量边缘节点。在最新发布的V0.4版中,加⼊对重边缘,也就是边缘集群的⽀持,完成了对所有边缘场景的全覆盖。 以上图为例,共有三个集群,集群 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS关闭SELinux安全模块