从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估

2023-11-18

从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估

 

update 2018年1月31日22:21:56

最初版本是基于行人检测Piotr Dollar大佬的论文和代码胡乱写的 难免有错

严谨的paper请参考:The Relationship Between Precision-Recall and ROC Curves (ICML2006) , https://www.biostat.wisc.edu/~page/rocpr.pdf

-------------------------------------------------------------------------------------

想要在行人检测的evaluation阶段要计算miss rate,就要从True Positive Rate讲起:miss rate = 1 - true positive rate

true positive rate毕竟是一个rate,是一个比值。是谁和谁比呢?P

要从TP、FP、TN、FN讲起。
考虑一个二分类问题:一个item,它实际值有0、1两种取值,即负例、正例;而二分类算法预测出来的结果,也只有0、1两种取值,即负例、正例。我们不考虑二分类算法细节,当作黑箱子就好;我们关心的是,预测的结果和实际情况匹配、偏差的情况。

TP:true positive,实际是正例,预测为正例
FP:false positive,实际为负例,预测为正例
TN:true negative,实际为负例,预测为负例
FN:false negative,实际为正例,预测为负例

也就是说:我们不仅考虑算法的预测结果对不对,还要考虑是“哪一种对”;我们还考虑算法预测错的情况,并且我们深究“是哪一种错”:

OK,既然把TP、FP、TN、FN搞清楚了,那么看几个rate的定义。
TPR:true positive rate, 等于,又叫precision rate
FPR:false positive rate,等于
TNR:true negative rate,等于
FNR:false negative rate,等于,又叫miss rate
观察后不难发现,每个rate的公式,都是前,#表示number,即统计数量。
而结合前面画的那张图,容易发现,每个rate公式还可以通过画图理解:每个rate都等于,虽然这么说起来不严谨,赫赫但是形象化的理解更容易记住。
还有一点:fnr+tpr=1, fpr+tnr=1
其实后面使用到的,更多的是fnr,俗称miss rate,作为ROC曲线的纵坐标;而横坐标则取fpr

理解阈值
再次考虑二分类问题。你说,真实世界会存在严格的二分类吗?就说人的性取向,有的人也是“徘徊不定”的,这样的人真是让人头疼但是必须想办法处理掉。因此设定一个阈值:根据这个人的一系列举动,给ta的性别累计打分并最终映射到[0,1]区间(得到score),然后比如设定阈值t为0.5,若score>t=0.5,那么ta是男的;否则是女的。
回到理论上,每一个需要预测的变量,其取值都可以根据阈值进行划分。对于二分类,我设定阈值t,当某个item取值大于t,就判定为正例(positive),否则判定为负例(negative)。
也就是说,我手头有一堆预测得到的数据(甭管我用的是哪种机器学习算法),我通过设定不同的阈值,能得到不同的TP、FP、TN、FN取值,相应的TPR、FPR、TNR、FNR取值也产生变化。那么这种变化我就可以通过图像显示出来:对于一个确定的阈值t,FPR和TPR是确定的,得到一个(fpr,tpr)元组;将阈值从0到1变化,当t=0时所有预测结果都大于0都是Positive所以FP=TP=1,FN=TN=0,fpr=tpr=1,得到(1,1)点,当t=1时所有预测结果都小于0都是Negative所以FP=TP=0,FN=TN=1,fpr=tpr=0,得到(0,0)点,t取(0,1)上的值时则fpr和tpr都在0到1之间变化,且不难发现:当t增加,#FP也减小,#TN增加,则fpr减小;当t增加,#TP减小,#FN增加,则tpr减小。也就是说,当阈值t从0变化到1,fpr和tpr也单调减小,从(1,1)减小到(0,0)

呃,这里不知道为什么,大多数我看到的文献,都是画出fpr和tpr的图像,而把阈值本身省掉了,得到ROC曲线:

Anyway,我们继续,我们的目标是搞清楚行人检测评估中的miss rate怎么算。等等,好像已经出来了:miss rate = 1 - true positive rate,那么对应的YoX图像,也就是miss rate - false positive rate图像,就应当是单调下降的曲线。

绘图
干巴巴的说什么单调增加单调下降缺少直观印象,有代码有绘图才是正道~
我使用的是Caltech行人检测数据集网站主页提供的matlab工具,因为想要搞明白的miss rate是在pedestrian检测中作为评价标准出现,而这个Caltech数据集以及matlab工具都是行人检测中会用到的工具。废话不多说,下载好这个toolbox后打开并添加到path中,进入matlab目录调用plotRoc函数就能玩了,比如:

1.k=2; x=0:.0001:1; data1 = [1-x; (1-x.^k).^(1/k)]';
2.k=3; x=0:.0001:1; data2 = [1-x; (1-x.^k).^(1/k)]';
3.hs(1)=plotRoc(data1,struct('color','g','marker','s'));
4.hs(2)=plotRoc(data2,struct('color','b','lineSt','--'));
5.legend( hs, {'roc1','roc2'} ); xlabel('fp'); ylabel('fn');

图中纵坐标标记为fn,其实是fnr(false negative rate),也就是1-tnr。fnr俗称miss rate。而横坐标fpr(false positive rate),也可以用FPPI(False Positive Per Image)或者FPPW(False Positive Per Window)来表示。

OK,总算搞懂了:要想绘制行人检测的evaluation阶段的miss rate - FPPI图像(roc曲线),需要有带annotation的测试图片(提供作为ground truth的object window的bbox坐标),并且用某个算法(各种机器学习模型都行,看效果了)对每个测试图片算出若干bbox坐标:前者()作为“实际取值”,后者()作为“预测取值”,当阈值t从0变化到1,每个预测取值也会变化,从{TP,FP,TN,FN}中取值,而在任意一个t的取值上,FPR、FNR(miss rate)都可以通过统计#TP,#FP,#TN,#FN后算出,因而就能得到plotRoc绘图函数所需的参数D,进而绘制出ROC曲线勒~

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估 的相关文章

  • 在 MATLAB 中使用 FFT 的频率响应

    这是场景 使用频谱分析仪 我有输入值和输出值 样本数是32000采样率为2000样本 秒 输入是正弦波50 hz 输入为电流 输出为压力 单位 psi 我如何使用 MATLAB 根据这些数据计算频率响应 使用 MATLAB 中的 FFT 函
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • MATLAB 中时间戳过滤器的优化 - 处理非常大的数据集

    我正在 MATLAB 中编写一个程序 必须使用 MATLAB 并且不能真正使用 MEX 来过滤大量数据 我需要实现的过滤器之一要求我将时间戳向量与其他时间戳不会出现的已知 不良 时间列表进行比较 一个典型的时间戳向量有大约 2 000 00
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • Matlab - 如果值包含xxx,则删除元胞数组中的行

    在 Matlab 中 如何删除包含变量字符串的元胞数组中的元胞 假设我的元胞数组是 C svnTrunk RadarLib radarlb utilities scatteredInterpolant m C svnTrunk RadarL
  • MATLAB 中最有效的矩阵求逆

    在 MATLAB 中计算某个方阵 A 的逆矩阵时 使用 Ai inv A should be the same as Ai A 1 MATLAB 通常会通知我这不是最有效的求逆方法 那么什么是更有效率的呢 如果我有一个方程系统 可能会使用
  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • 使用mat2cell将MxN的矩阵划分为1xN大小的M矩阵

    我有一个大小为 MxN 的矩阵 比方说 1867x3 1867 行和 3 列 我想将其分成 1867 个大小为 1x3 的单元格 我使用了mat2cell X 1 1866 这里X是矩阵 1867x3 结果给出了两个单元格 一个单元格的大小
  • MATLAB:具有复数的 printmat

    我想使用 MATLAB 的printmat显示带有标签的矩阵 但这不适用于复数 N 5 x rand N 1 y rand N 1 z x 1i y printmat x y z fftdemo N 1 2 3 4 5 x y x iy O
  • 有没有办法在matlab中进行隐式微分

    我经常使用 matlab 来帮助我解决数学问题 现在我正在寻找一种在 matlab 中进行隐式微分的方法 例如 我想区分y 3 sin x cos y exp x 0关于dy dx 我知道如何使用数学方法通常做到这一点 但我一直在努力寻找使
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 括号中的波形符字符

    在 MATLAB 中 以下代码执行什么操作 m func returning matrix 波浪号运算符 的作用是什么 在 Matlab 中 这意味着不要将函数中相应的输出参数分配到赋值的右侧 因此 如果func returning mat
  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • matlab中的排列函数是如何工作的

    这是一个有点愚蠢的问题 但我似乎无法弄清楚排列在 matlab 中是如何工作的 以文档为例 A 1 2 3 4 permute A 2 1 ans 1 3 2 4 到底是怎么回事 这如何告诉 matlab 3 和 2 需要交换 哇 这是我迄
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • Matlab 的 imresize 函数中用于插值的算法是什么?

    我正在使用 Matlab Octaveimresize 对给定的二维数组重新采样的函数 我想了解如何使用特定的插值算法imresize works 我在Windows上使用八度 e g A 1 2 3 4 是一个二维数组 然后我使用命令 b
  • @(t)在Matlab中是什么意思? [复制]

    这个问题在这里已经有答案了 正如标题所示 考虑到下面的上下文 t 在 Matlab 中到底意味着什么 computeNumericalGradient 是一个函数 cofiCostFunc 也是一个接受一堆参数的函数 问题是 t 对 cof
  • Matlab Builder JA - 将 Matlab 编译成 Java jar - 免费版本?

    请记住 我对 Matlab 一无所知 Matlab Builder JA 允许开发人员构建 Matlab 应用程序并将其导出到 Java jar 中 太棒了 我只需要生成一个 jar 然后就可以从其他 java 代码中使用它 有谁知道单罐包
  • matlab中求和函数句柄

    Hi我试图对两个函数句柄求和 但它不起作用 例如 y1 x x x y2 x x x 3 x y3 y1 y2 我收到的错误是 对于 function handle 类型的输入参数 未定义函数或方法 plus 这只是一个小例子 实际上我实际

随机推荐

  • [机缘参悟-74]:沟通技巧-无论在职场还是在家,尽量少用反问句

    目录 反问句的案例 尽量不要使用反问句 避免使用反问词 把反问句改为陈述句 反问句的案例 那天闲聊 邻居老贾向老友们诉苦 老伴今天又用反问句 款待 他了 中午炒菜时 老伴让他拿一瓶油来 老贾问 油瓶在哪里 你觉得油瓶会在哪里 老贾又问 是不
  • 解决k8s集群环境内存不足导致容器被kill问题

    背景 最近线上环境上出现了一个问题 k8s集群环境Pod中的tomcat容器运行一段时间后直接被killd 但有时一切看起来正常 不能准确判断在什么时机出现被Killd问题 本文就此问题介绍了Linux内存不足原因以及为什么特定进程会被杀死
  • nRF24L01单芯片2.4GHz收发模块射频信道频率

    框架图 管脚图 操作模式配置 射频信道频率 RF通道频率决定了 nRF24L01 使用的通道中心 该通道在 1Mbps 时占用 1MHz 带宽 在 2Mbps 时占用 2MHz 带宽 nRF24L01 可以在 2 400GHz 到 2 52
  • poll()函数详解

    poll提供的功能与select类似 不过在处理流设备时 它能够提供额外的信息 include
  • 测试流程简述

    测试流程 整体流程如下 需求评审 功能需求 性能需求 接口需求 测试计划 测试用例 用例评审 测试环境搭建 平台 架构 web服务器 数据库 执行用例 缺陷记录 缺陷跟踪和回归测试 测试报告 测试计划 测试计划 描述了要进行的测试活动的范围
  • 第八站:JavaScript的数据类型、运算符、流程控制语句

    第八站 JavaScript的数据类型 运算符 流程控制语句 欢迎来到第八站 JavaScript的数据类型 运算符 流程控制语句 在这一站 我们将深入探索JavaScript中的核心概念 为你揭示这个语言的奇妙之处 准备好继续冒险了吗 让
  • linux安装datax

    1 创建文件夹 存放安装包 cd opt mkdir datax cd datax 2 下载安装包 wget http datax opensource oss cn hangzhou aliyuncs com datax tar gz 3
  • 流程引擎是什么?有什么作用?

    编者按 本文详细论述了流程引擎的概念 流程引擎的作用以及选型的要旨 并介绍了自主研发具有中国特色的流程引擎 关键词 流程引擎 集成性 数据分析 BPMN2 0规范 中国特色 流程审批 自主研发 流程引擎是什么 流程引擎 用来驱动业务按照设定
  • Python基础语法(函数式编程)

    目录 实例1 温度转换 实例2 蟒蛇绘制 模块1 turtle库 基本图形绘制 基本数据类型 1 整数 浮点数 复数 1 整数 2 浮点数 3 复数 4 数值运算操作符 实例3 天天向上的力量 2 字符串 模块2 time库 时间的基本处理
  • SpringCloud文件上传

    2 实现图片上传 刚才的新增实现中 我们并没有上传图片 接下来我们一起完成图片上传逻辑 文件的上传并不只是在品牌管理中有需求 以后的其它服务也可能需要 因此我们创建一个独立的微服务 专门处理各种上传 2 1 搭建项目 2 1 1 创建Spr
  • Android:播放UDP流例如udp://@239.0.0.3:8218

    成功实现播放udp github下载 求大佬们给个star GitHub YangWenlong71 udpplayer 基于ijk重新编译 未做删减几乎全能的安卓视频播放器 支持播放UDP https http 等 分割线 研究思路及结果
  • Django(17):Cookie 和 Session

    目录 Cookie 什么是Cookie Django使用Cookie Cookie使用示例 session 什么是session Django使用session Session使用示例 小结 HTTP协议本身是 无状态 的 在一次请求和下一
  • Flutter——头像上传功能,实现照片选择及裁剪

    使用两个开发库 image picker和image crop 前者用来拍照或者从相册选择照片 后者用来裁剪 结果均为File类型 裁剪完成后可以直接上传文件 先写到这儿 有时间上代码 更新 实现的功能是点击头像图片 弹出选择框 选择拍照或
  • C# 流程图完整功能,矩形,菱形圆,三角形,直线,折线,放大,滚动条,保存等等功能(附下载链接)

    C 流程图完整功能 矩形 菱形圆 三角形 直线 折线 放大 滚动条 保存等等功能 点我下载项目源码 流程图具体功能如下 连接时图形有线帽 部分动漫展示 public virtual void Draw Graphics gr canvas
  • 51虚拟安卓系统v1.1.0.6-安卓端的虚拟机(支持root,xposed框架)

    应用名称 51虚拟安卓系统 应用包名 com f1player 应用版本 1 1 0 6 应用大小 266 87M 下载地址 链接 https pan baidu com s 1N9YWIafoI575GfKvtHkd3A 提取码 qnr2
  • Ubuntu系统中如何进行屏幕截图

    前言 我的环境是双系统 ubuntu20 04 但应该无论是什么版本的ubuntu都可以实现 方法 1 快捷键截图 在设置里找到键盘快捷键 找到截图目录 就可以看到有关截图的快捷键 可以自己手动更改 单击选项即可 一般使用shift pri
  • 【C++编程技巧】根据字符串中的指定字符作为分界将字符串拆分

    在C 中可以用split 函数方便的实现字符串的拆分 在C 中没有类似的函数 用strtok函数进行完成字符串分割 原型 char strtok char str const char delim 功能 分解字符串为一组字符串 参数说明 s
  • JAVA中的JeeSite框架基本简介

    JAVA的主流框架是很多的 每一个框架都有它的适用项目和条件 所有JAVA程序员都熟悉的肯定是常用的四大框架 而JeeSite这个框架使用的人却不是很多 但是这个框架却有它的独到之处 稳定 高效 调用方便 这里对JeeSite做一个简单的介
  • kill掉僵尸进程的方法(kill -9 <PPID>)

    ps A ostat ppid pid cmd grep e Zz 先用以上bash命令找到僵尸进程 Z右边第一列为PPID 第二列为PID kill 9 PPID 即PID对应的父进程即可 kill 9
  • 从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估

    从TP FP TN FN到ROC曲线 miss rate 行人检测评估 update 2018年1月31日22 21 56 最初版本是基于行人检测Piotr Dollar大佬的论文和代码胡乱写的 难免有错 严谨的paper请参考 The R