当前位置: 首页 > article >正文

Evaluation中Percision和Recall的理解

1. 评价指标

在机器学习、深度学习快速发展的时代,模型和技巧层出不穷,那么就需要有一定的指标去量化地评价这些新的idea,是否work,优化的幅度有多大。

2. 混淆矩阵

在分类任务中,通常可以用混淆矩阵比较直观地分析,各类别的预测准确度,模型在哪个类别的性能较低,以确定后续优化的方向。

预测 \ 标签总计
16117
41923
总计202040

混淆矩阵所示,共40张图待预测,其中20张猫、20张狗。
可直观得知,模型对于狗的预测效果更好。

此处引入TP、FP、FN、TN的概念
以猫为例:

预测 \ 标签正样本负样本
预测为正(Positive)TPFP
预测为负(Negative)FNTN

TP: True Positive
FP: False Positive
FN: False Negative
TN: True Negative

PositiveNegative指代预测的结果,即是否为猫。
TrueFalse指预测的正确性。

如上例, T P = 16 , F P = 1 , F N = 4 , T N = 19 TP=16, FP=1, FN=4, TN=19 TP=16,FP=1,FN=4,TN=19

注:针对每个类别,都有对应的TP, …, TN。上例指代是猫。(狗的TP=19,其他可以类推)

3. 精确率

精确率(Precision)是预测正确预测为正样本的比例。公式如下:
P r e c i s i o n = T P T P + F P = T P A l l P r e d i c t Precision = \frac {TP}{TP + FP}=\frac {TP}{All \ Predict} Precision=TP+FPTP=All PredictTP
就像战场中有10个目标,你射了12发导单,射中了8发,那么 T P = 8 , F P = 4 , P r e c i s i o n = 8 / 12 = 66.7 % TP=8, FP=4, Precision=8/12=66.7\% TP=8,FP=4,Precision=8/12=66.7%

4. 召回率

召回率(Recall)是预测正确正样本总数的比例。需要和精确率分清的是,精确率描述的是精准度,召回率描述的是对目标的覆盖率。公式如下:
R e c a l l = T P T P + F N = T P A l l T a r g e t Recall = \frac {TP}{TP + FN} = \frac {TP}{All \ Target} Recall=TP+FNTP=All TargetTP
举回上面战场的例子,10个目标,射了12发导单,射中了8发,那么 T P = 8 , F N = 2 , R e c a l l = 8 / 10 = 80 % TP=8,FN=2,Recall=8/10=80\% TP=8,FN=2,Recall=8/10=80%

可以看出,你的召回率高于准确率,10个目标中了8个(80%),但12发导单才中了8个(66.7%)。

不同场合对模型的性能有不同的侧重需求,除了性能甚至还会有时效性的需求,在算力有限的情况下,这其实都是个trade off(折中)。
但在学术研究,或者客观评价模型、技巧的优劣上,往往要综合评价它的Precision和Recall,由此引出了F1-Score。

5. F1-Score

F1-Score是Precision(P)和Recall(R)的调和平均值。
由下公式可以看出,F1-Score同时取决于P和R,两者皆大则大,且最大值为1。
1 F 1 = 1 P + 1 R F 1 = 2 T P 2 T P + F P + F N \frac {1}{F_1} = \frac {1}{P} + \frac {1}{R} \\ F1 = \frac {2TP} {2TP + FP + FN} F11=P1+R1F1=2TP+FP+FN2TP

http://www.lryc.cn/news/2415081.html

相关文章:

  • Animation 开源项目教程
  • SonarQube代码质量检查平台
  • 深入理解异或运算 xor 的含义——再探不使用加减乘除实现加法运算、不使用额外空间交换两个变量的值
  • 面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?
  • Dev-C++/Cpp使用入门详解
  • Angular简介(大神可略过)
  • Linux shell编程学习笔记69: curl 命令行网络数据传输工具 选项数量雷人(中)...
  • gateWay网关组件及工作原理
  • 一次性搞定!思源字体安装、使用及常见问题解答
  • WEBGL原理
  • Java中Synchronized的用法
  • jav常用类-时间处理相关类
  • Homebrew你了解吗?
  • MinGW下载和安装以及环境配置详细步骤
  • 一(一)、keil常见问题和解决方法常用操作
  • DOM 基础知识
  • flex布局(详解)
  • 第4章 探究 Composer 加载原理
  • Altium Designer 小白入门教程
  • 头条 _signature 解析 步步调试超级详细傻瓜式教程 2023版
  • Lua和C语言交互入门
  • DCS控制系统概述
  • 电赛经验分享——一文看懂PID
  • ROS学习笔记(一)从0开始的ROS的安装以及初步使用
  • async 和 await(详解)
  • kubernetes(4)Pod的核心概念、Pod的调度
  • SSM框架(七):MyBatisPlus
  • 超详细的图解 Numpy,不收藏后悔!
  • Java中UUID的简单介绍
  • 国产操作系统环境下VNC的使用教程