之前一直记不熟各种指标的具体计算,本文准备彻底搞定这个问题,涵盖目前遇到过的所有评价指标。

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的更多相关文章

  1. Atitit 图像清晰度 模糊度 检测 识别 评价算法 原理

    Atitit 图像清晰度 模糊度 检测 识别 评价算法 原理 1.1. 图像边缘一般都是通过对图像进行梯度运算来实现的1 1.2. Remark: 1 1.3.  1.失焦检测. 衡量画面模糊的主要方 ...

  2. 陈新宇:CKafka在人脸识别PAAS中的应用

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 我叫陈新宇,在格灵深瞳负责数据流的研发,首先特别感谢如今老师,他们把Kafka一个优秀的消息中间件 ...

  3. Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结

    Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结 1.1. 原理,主要使用像素模糊后的差别会变小1 1.2. 具体流程1 1.3. 提升性能 可以使用采样法即可..1 ...

  4. Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结

    Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结 1.1. 五中滤镜的分别效果..1 1.2. 基于肤色的图片分类1 1.3. 性能提升2 1.4. --co ...

  5. Zybo智能小车识别图像中的文字

    智能小车识别图像中的文字 [TOC] 运行平台 这次的内容是基于Xilinx公司的Zybo开发板以及其配套的Zrobot套件开发 Zybo上面的sd卡搭载了Ubuntu12.04LTS的linux版本 ...

  6. qtp不识别树结构中的点击事件

    qtp不识别树结构中的点击事件,未生成该点击事件的脚本,解决办法: 1.未生成点击"auto分类c1"的脚本 2.点击1.对象库-2.添加对象库-3.选中对象-点击OK,即将该对象 ...

  7. ASP.NET 后台不识别ASPX中的控件

    请问后台不识别ASPX中的控件,怎么解决 这个程序是在网上下载的 C# code <asp:DataGrid runat="server" ID="dgList1& ...

  8. javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试车牌识别准确率99.7%以上,单次平均耗时39ms)

    javaCV图像处理系列: 一.javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 二.javaCV图像处理之2:实时视频添 ...

  9. Python中识别DataFrame中的nan

    # 识别python中DataFrame中的nanfor i in pfsj.index: if type(pfsj.loc[i]['WZML']) == float: print('float va ...

随机推荐

  1. <Wonder Woman> 摘抄

    <Wonder Woman> My father told me once, he said,“ If you see something wrong happening in the w ...

  2. RestTemplate + okhttp 实现远程调用

    1. 添加依赖 <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp --> <dependency ...

  3. EasyUI表单验证插件扩展

    $.extend($.fn.validatebox.defaults.rules, { regex: { validator: function (value, param) { var regex ...

  4. 查看mysql是否锁表了

    1.查看表是否被锁: (1)直接在mysql命令行执行:show engine innodb status\G. (2)查看造成死锁的sql语句,分析索引情况,然后优化sql. (3)然后show p ...

  5. 面试想拿 10K,HR 说你只值 7K,该怎样回答或者反驳?

    当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫. 礼貌地说:"7K是吗?了解了.嗯~其实我对贵司的面试官印象很好.只不过,现在我的手头上已经有一份11K的offer. ...

  6. 【Spring】bean的作用域(@Scope) - singleton、prototype

    已知spring 3+已拥有多种不同的作用域: singleton(默认).prototype.request.session.global session.(参考: spring中scope作用域( ...

  7. Gitee Git bash VSCode操作简易说明

    GIT Git是一个分布式的版本控制系统,只是软件,需要你下载装到电脑上,实现git功能. Github.Gitee基于git的项目托管平台.Github是国外的,连接速度因人而异:另外Github收 ...

  8. while语句的使用

    学习while语句的正确用法:题目:老师教学生,讲一次之后 问学生会不会,如果不会:就再讲一遍.如果会了就放学,但是如果连讲了十遍还是不会,那也要放学回家 namespace _44讲十遍会不会 { ...

  9. Java出现次数最多的整数

    描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20.然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来.如果有两个元 ...

  10. select count(1)和select count(*)的区别

    select count(1) from 表a //查询时会对常数列进行统计行数select count(*) from 表a //查询时会找表a中最短的列进行统计行数 因为使用count(*)查询会 ...