从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 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曲线勒~
从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估的更多相关文章
- 机器学习中 TP FP TN FN的概念
二分类 在二分类问题中,TP FP TN FN 是非常清楚且易于理解的. TP (True Positive) : 预测为 1 ,真实值也为 1 -> 真阳性 FP (False Positiv ...
- 机器学习基础一(TP,TN,FP,FN等)
TP:预测为正向(P),实际上预测正确(T),即判断为正向的正确率 TN:预测为负向(N),实际上预测正确(T),即判断为负向的正确率 FP:预测为正向(P),实际上预测错误(F),误报率,即把负向判 ...
- 精确率与召回率,RoC曲线与PR曲线
在机器学习的算法评估中,尤其是分类算法评估中,我们经常听到精确率(precision)与召回率(recall),RoC曲线与PR曲线这些概念,那这些概念到底有什么用处呢? 首先,我们需要搞清楚几个拗口 ...
- 绘制ROC曲线
什么是ROC曲线 ROC曲线是什么意思,书面表述为: "ROC 曲线(接收者操作特征曲线)是一种显示分类模型在所有分类阈值下的效果的图表." 好吧,这很不直观.其实就是一个二维曲线 ...
- ROC曲线 VS PR曲线
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...
- 模型监控指标- 混淆矩阵、ROC曲线,AUC值,KS曲线以及KS值、PSI值,Lift图,Gain图,KT值,迁移矩阵
1. 混淆矩阵 确定截断点后,评价学习器性能 假设训练之初以及预测后,一个样本是正例还是反例是已经确定的,这个时候,样本应该有两个类别值,一个是真实的0/1,一个是预测的0/1 TP(实际为正预测为正 ...
- 目标检测的评价指标(TP、TN、FP、FN、Precision、Recall、IoU、mIoU、AP、mAP)
1. TP TN FP FN GroundTruth 预测结果 TP(True Positives): 真的正样本 = [正样本 被正确分为 正样本] TN(True Negatives): 真的 ...
- ROC曲线、PR曲线
在论文的结果分析中,ROC和PR曲线是经常用到的两个有力的展示图. 1.ROC曲线 ROC曲线(receiver operating characteristic)是一种对于灵敏度进行描述的功能图像. ...
- 【数据挖掘】朴素贝叶斯算法计算ROC曲线的面积
题记: 近来关于数据挖掘学习过程中,学习到朴素贝叶斯运算ROC曲线.也是本节实验课题,roc曲线的计算原理以及如果统计TP.FP.TN.FN.TPR.FPR.ROC面积等等.往往运用 ...
随机推荐
- java 20 - 6 加入了异常处理的字节输出流的操作
昨天坐了十几个钟的车回家,累弊了.... ————————————割掉疲劳————————————— 前面的字节输出流都是抛出了异常不管,这次的加入了异常处理: 首先还是创建一个字节输出流对象,先给它 ...
- 实现了一个简单的cage变形器
今天实现了一个简单变形器,可以用一个网格的形状影响另一个网格的形状. 如图,蓝色网格的形状被灰色网格操控. 当前的算法非常简单,就是计算蓝色网格每个点到灰色网格每个点的距离,以距离x次方的倒数作为权重 ...
- javascript边角知识
1.组织默认事件 阻止默认事件,h5默认的input type='date'在某些浏览器和android设备上没有效果,这时要调用h5+的时间选择器,但是要组织input默认的click事件,代码如下 ...
- JavaScript---Ajax和函数回调,异步编程
一 Ajax 函数的定义 : Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),无刷新的从服务器读取数据,可以在不重新加载整个网页的情况下 ...
- 在Centos5下安装GraphicsMagick
安装GraphicsMagick的流水账: 安装参照的http://www.graphicsmagick.org/INSTALL-unix.html 解压 /home/milton/GraphicsM ...
- struts2验证框架
如何做一个工号 用户 密码 验证登录页面? 答:1,先画一个login.jsp ,如何画呢?先引入Struts2标签库,利用Struts2标签库画登录页面:如下: 2,先进入useractiion,在 ...
- 023医疗项目-模块二:药品目录的导入导出-从数据库中查出数据用XSSF导出excel并存放在虚拟目录最后下载(包括调试)
我们要实现的效果: 进入到这个页面后,输入要查询的条件,查询出药品表的数据,然后按下导出按钮 ,就会在服务器的一个目录下生成一个药品表的excel表格. 点击"导出"之后 ...
- 理解SQL Server中的权限体系(上)----主体
原文:http://www.cnblogs.com/CareySon/archive/2012/04/10/mssql-security-principal.html 简介 权限两个字,一个权力,一个 ...
- 矩形覆盖-我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
class Solution { public: int rectCover(int number) { ; ; ; ||number==) ; ) ; ;i<number+;i++){ res ...
- 20135326、20135303-linux实验一实验报告
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1353 姓名:王亦可 .魏昊卿 学号:20135326.20135303 成绩: ...