检测识别问题中的metrics
之前一直记不熟各种指标的具体计算,本文准备彻底搞定这个问题,涵盖目前遇到过的所有评价指标。
TP,TN,FP,FN
首先是true-false和positive-negative这两对词。以二分类为例:
positive和negative指的是预测的分类是正样本还是负样本,true和false指的是预测结果是对的还是错的。
因此:
实际类别\预测类别 | 正样本 | 负样本 |
---|---|---|
正样本 | TP | FN |
负样本 | FP | TN |
基于这些数值可以计算各项指标:
Accuracy, precision, recall等
Accuracy
\[
A C C=\frac{T P+T N}{T P+T N+F P+F N}
\]
分子为所有正确预测了的样本数目(即正样本被预测为正,负样本被预测为负),分母为所有样本总数。
Accuracy代表了所有样本中,被正确预测的样本所占的比例。
其缺陷在于,当正负样本严重不均衡的时候无法反映出模型的真实水平。
Precision
\[
P=\frac{T P}{T P+F P}
\]
分子为正样本被预测为正的个数,分母为所有被预测为正的个数。
Precision代表了被预测为正的样本中,真的是正样本的比例。又叫查准率。
Recall
\[
\operatorname{Recall}=\frac{T P}{T P+F N}
\]
分子为正被预测为正,分母为正样本的总数。
Recall代表了所有正样本中,被正确预测为正样本的比例。
Recall一般被称为召回率,,又叫Sensitivity,又叫查全率 ,它和一些传统方法中所说的正检率是一个概念。
Specificity
上述的Sensitivity对应的有Specificity:
\[
\operatorname{Specificity}=\frac{T N}{FP+TN}
\]
代表实际负样本中被预测为负的比例。
f1-score
\[
\mathrm{F} 1=\frac{2 * P * R}{P+R}
\]
f1-score是对precision和recall的调和平均值。
正检率,虚警率,漏警率
正检率(P_d):正样本被正确检测到的概率,即recall。
漏警率(P_m):正样本没有被预测为正的概率,即1-P_d,即1-recall。
虚警率(P_f):负样本被预测为正的概率,即1-Specificity。
指标间的关系
为了更简单清楚的说明,用P和N表示预测结果是正和负,用P^和N^表示正样本和负样本。不用*号的原因是我不想在markdown里打一堆转义符。我们有P+N=P^+N^。
对于一个正常的识别模型,P中大多数应当是P^,小部分是N^;同样N中大多应当是N^,小部分是P^。
Precision和recall是互相矛盾的一对指标。直观地理解,precision为所有P中P^的比例,要想提高这个比例,需要更加严格的筛选,更严格的筛选意味着,模型只会将那些预测概率非常高的样本预测为P,显然这会更多地筛选掉实际为N^的P,剩下的P中P^。而对于recall,recall代表P^中P的比例,更加严格的筛选会导致,一些P^的样本没有被预测为P,从而导致recall下降。
同理,正检率与虚警率成正相关关系。
ROC曲线与PR曲线
ROC曲线
ROC曲线即纵轴为正检率,横轴为虚警率。
懒得放示意图了,简单描述一下,一般为从左下到右上的凹函数(注意凹函数的定义),区间为(0,0),(1,1)的正方形区域内。评估方法为计算曲线下积分面积,即AUC。
对于瞎猜模型,ROC曲线应当是一条从(0,0)到(1,1)的对角直线,故AUC为0.5。
对于一个正常的模型,AUC应当在0.5到1之间。越大越好。
PR曲线
类似地,PR曲线纵轴为precision,横轴为recall。
PR曲线一般为从左上到右下的凹函数,区间同样在(0,0),(1,1)的正方形区域。评估方法同样为计算曲线下积分值,称为AP值,对于多个分类,取平均,称为mAP值。
检测识别问题中的metrics的更多相关文章
- Atitit 图像清晰度 模糊度 检测 识别 评价算法 原理
Atitit 图像清晰度 模糊度 检测 识别 评价算法 原理 1.1. 图像边缘一般都是通过对图像进行梯度运算来实现的1 1.2. Remark: 1 1.3. 1.失焦检测. 衡量画面模糊的主要方 ...
- 陈新宇:CKafka在人脸识别PAAS中的应用
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 我叫陈新宇,在格灵深瞳负责数据流的研发,首先特别感谢如今老师,他们把Kafka一个优秀的消息中间件 ...
- Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结
Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结 1.1. 原理,主要使用像素模糊后的差别会变小1 1.2. 具体流程1 1.3. 提升性能 可以使用采样法即可..1 ...
- Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结
Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结 1.1. 五中滤镜的分别效果..1 1.2. 基于肤色的图片分类1 1.3. 性能提升2 1.4. --co ...
- Zybo智能小车识别图像中的文字
智能小车识别图像中的文字 [TOC] 运行平台 这次的内容是基于Xilinx公司的Zybo开发板以及其配套的Zrobot套件开发 Zybo上面的sd卡搭载了Ubuntu12.04LTS的linux版本 ...
- qtp不识别树结构中的点击事件
qtp不识别树结构中的点击事件,未生成该点击事件的脚本,解决办法: 1.未生成点击"auto分类c1"的脚本 2.点击1.对象库-2.添加对象库-3.选中对象-点击OK,即将该对象 ...
- ASP.NET 后台不识别ASPX中的控件
请问后台不识别ASPX中的控件,怎么解决 这个程序是在网上下载的 C# code <asp:DataGrid runat="server" ID="dgList1& ...
- javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试车牌识别准确率99.7%以上,单次平均耗时39ms)
javaCV图像处理系列: 一.javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 二.javaCV图像处理之2:实时视频添 ...
- Python中识别DataFrame中的nan
# 识别python中DataFrame中的nanfor i in pfsj.index: if type(pfsj.loc[i]['WZML']) == float: print('float va ...
随机推荐
- MATLAB中冒号的用法解析
MATLAB中冒号的用法解析 1.: 表示所有的意思. (1)如:a(1,:) 表示a的第1行,示例: 结果: 同样的如果a(2,:)表示a的第2行 (2)反过来,a(:,2) 表示a的第3列,示例: ...
- #《Essential C++》读书笔记# 第六章 以template进行编程
练习题答案 练习6.1 试改写以下类,使它成为一个class template: class example { public: example(double min, double max); ex ...
- Markdown语法,及其在typora中的快捷键,学写博客吧!!!
前言 Markdown (MD) 是现在最流行的一种文档书写语言格式.平常写笔记,写博客,写计划再好不过了.个人觉得使用很简单,右击鼠标,有你想要的操作. Typora是简洁.操作简单.功能强大.方便 ...
- [Contract] Solidity 判断 mapping 值的存在
比如 mapping(address => uint) tester,只需要判断 mapping 是否为默认值 0, tester[msg.sender] == 0 "You can ...
- MySQL 8 用户定义函数
MySQL Server可以通过创建或者加载UDFs(User-Defined Functions)来扩展服务器功能. 通过CREATE FUNCTION语句加载 UDF,比如: CREATE FUN ...
- EasyUI笔记(四)菜单和按钮
本系列只列出一些常用的属性.事件或方法,具体完整知识请查看API文档 Menu(菜单) 菜单组件通常用于快捷菜单.他是构建其他菜单组件的必备基础组件.比如:menubutton和splitbutton ...
- 监控redis cluster 主从实例是否切换,切换前后对应关系
需求:编写脚本实现对redis cluster 主从是否发生主从切换进行监控,若发生切换,输出切换前后主从对应关系. 初始化对比文件,仅执行一次,后续不需要在执行,除非该文件不存在. cmd=&quo ...
- egg 提交数据 防csrf 攻击 配置
await ctx.render('from',{csrf:this.ctx.csrf}); 或者 使用中间件 ctx.state.csrf = ctx.csrf;
- Page Object设计模式(二)——poium测试库
一.简介 poium是一个基于Selenium/appium的Page Object测试库,最大的特点是简化了Page层元素的定义. 项目地址:https://github.com/SeldomQA/ ...
- Linux中为什么执行自己的程序要在前面加./
前言 在Linux中,我们执行内置命令时,直接输入命令名称即可,如: $ mv a b #将a重命名为b 而在执行自己写好的程序时,却要带上./,例如: $ hello hello: comm ...