机器学习评测指标概述

机器学习评测指标概述

文章目录

1. 基本分类

1.1 样本类别

机器学习评测任务的一个样本,根据预测结果和标注结果的不同,有如下所示的四个类别:

真实\预测

正类

负类

正类

TP

FN

负类

FP

TN

具体而言

TP(True Positive):P表示预测为正类;同时实际也是正类,这是正确的,所以是True,组合为TP,也叫真阳

FN(Flase Negative):N表示预测为负类;同时实际是正类,这是错误的,所以是False,组合为FN,也叫假阴

FP(False Positive):P表示预测为正类,同时实际是负类,这是错误的,所以False,组合为FP,也叫假阳

TN(True Negative):N表示预测为负类,同时实际是负类,这是正确的,所以True,组合为TN,也叫真阴

以新冠肺炎核酸检测为例,假定阳性为正类,那么对于一次核酸检测,阳性患者被检测为阳性为TP,被检测为阴性为FN,阴性健康人被检测为阳性为FP,被检测为阴性为TN。

1.2 置信度阈值

置信度阈值(confidence threshold),用于对预测结果进行分类。模型的每一个预测结果都会伴随一个置信度,给定置信度阈值后,只有预测置信度超过阈值且结果预测正确才能认为是一个TP。

1.3 IoU阈值

IoU(Intersection over Union),指框的交并比,取值范围为[0,1],如果两个框完全重合则为1,完全不重合为0。在目标检测的样本分类过程中,判断框是否预测正确,一方面要比较模型输出的置信度和给定的置信度阈值,另一方面也要计算预测框与标注框的IoU,置信度阈值和IoU阈值同时满足条件才能认为预测正确。此外,如果预测结果中多存在多框,那么对于某个预测框,与其IoU最大的标注框为对应框,在进一步比较预测类别是否正确。

2. 基本指标

基于单个样本的基本分类,对于一组样本则有一些由基本分类计算而来的基本指标,用以衡量模型的效果

recall

recall(召回率),表示样本中的正类被正确预测为正例的比例,也叫查全率。以新冠检测为例,为一组检测中,阳性患者被正确检出的比例。

recall = \frac{TP}{TP+FN}

precison

precison(精确率),表示预测结果为正类的样本中,真正的正样本比例。以新冠检测为例,为一组检测中,检测结果为阳性的样本中确为阳性的比例。

precison = \frac{TP}{TP+FP}

accuracy

accuracy(准确率),表示分类正确的样本占总样本个数的比例。以新冠检测为例,为一组检测中,阳性检测为阳性,阴性检测为阴性的人数与全体检查人数的比值。

accuracy = \frac{TP+TN}{TP+FP+TN+FN}

3.进阶指标

以基础指标为基,在全面的评估模型效果时,还有一些常用的进阶指标,在本节一一列出。

3.1 F1-score

F1-score,为percision和recall的调和平均值,用以解决其二者矛盾的问题

F1=\frac{2*precision*recall}{precision+recall}

3.2 pr曲线

定义

pr曲线(precision-recall curve),描述一组样本下,二分类问题的精确率和召回率随置信度的波动情况。

以猫狗分类为例,对于每一个样本都有一个置信度阈值(confidence-threshold),在该阈值的上下,TP和FP可能有不同表现,导致precision和recall的变化。

例如,以猫为正类绘制pr曲线时: 对于某个样本猫, 如果预测结果为猫,置信度为0.6,那么将置信度的阈值调整为>0.6后,TP的数量-1 如果预测结果为狗,置信度为0.6,那么将置信度的阈值调整为>0.6后,TP的数量+1

对于某个样本狗, 如果预测结果为狗,置信度为0.6,那么将置信度的阈值调整为>0.6后,FP的数量+1 如果预测结果为猫,置信度为0.6,那么将置信度的阈值调整为>0.6后,FP的数量-1,TP的数量+1

pr曲线示例

计算方式

  1. 首先将预测结果根据置信度进行重排
  2. 遍历预测结果,TP和FP逐一变化,进而导致precision和recall的变化

计算函数

sklearn库中的pr曲线计算函数(适用于二分类问题) htTPs://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_curve.html

目标检测的pr曲线计算

由1.3的内容可知,目标检测任务对样本分类的过程中还需要考虑IoU阈值,因此pr曲线的计算略有不同,大致计算方式为:对于预测的所有框,记为DTs(Detection Target), 每一个DT包含它的位置坐标和分类得分,我们按照上面所述的,对DTs按照分类得分由大到小进行排序,为了表示方便,仍旧记为DTs, 对于真实的Ground Truth, 我们记为GTs, 按照顺序,对于DTs中的每一个DT,都计算它和GTs的IOU值,如果最大的IOU值大于阈值,那么就认为检测成功,算作TP,并且最大IOU值的GT被认为是匹配成功,需要将其从GTs中移除;如果该最大的IOU值小于阈值,那么就意味着该DT与所有的GTs都匹配失败,是一个误检,自然就算作FP了;会出现多个检测结果DT同一个GT相匹配,那么分数最高(不是IOU值最高,而是该DT的分类得分)的被认为是TP,其余的检测结果被认为是FP,那么遍历完所有的DTs, 我们就知道哪些是TP,哪些是FP,而此时,如果GTs中仍然还有剩下的(因为匹配上的都被移走了)被认为是FN。

计算方式参考:htTPs://github.com/facebookresearch/detectron2/blob/main/detectron2/evaluation/pascal_voc_evaluation.py#L187

多分类p-r曲线计算方式

在描述多分类问题时,以 猫、狗、虎 三分类为例,对于某个类别猫,pr曲线的正负样本自然就变成了猫和非猫(狗+虎),这一显然的变化带来一个稍显复杂的问题:

多分类问题中,某个样本会输出所有类别的预测概率,但是猫和非猫的概率总和不像二分类问题一样总和为1,因此在围绕某个阈值上下波动的时候,最终的评测结果不一定会发生变化,此外,对于多分类问题,当阈值超过预测结果的最大值时,会认为该样本无效,因此产生了两种计算方式,

1.计算某一个类别(猫)的pr曲线时,只考虑模型输出中该类别的输出,那么猫和非猫的概率总和为1,计算方式与二分类问题一致。但是该计算方式与多分类模型的计算混淆矩阵时有所出入,多分类问题一般会采纳置信度最高的结果为最终结果。

2.保持置信度最高的结果为最终结果,在最终结果与标注结果一致时,与1的计算方式并无不同,最终结果与标注结果不一致时,该组p-r值对应的置信度阈值无法给出。举例分析,计算猫的pr曲线时: 对于某个样本猫,如果最高置信度结果为狗,那么置信度阈值的上升也不会将FN变为TP; 对于某个样本狗, 如果预测结果为虎(虽不为同一类别,但同样预测正确),那么置信度阈值的上升也不会将TN变为FP; 如果预测结果为猫,那么置信度阈值的上升,会使得FP变为TN。(最高阈值未过置信度阈值时,结果也为非猫),因此置信度为该预测结果的置信度。 但是将负样本正确预测为负样本的概率无法得知

综合以上情况,在计算多分类模型的pr曲线时,一般采用第1种方式进行计算,即在计算某一类别的pr曲线时,仅考虑模型对该类别的输出结果,忽略其他输出结果。

3.3 mAP

定义

mAP(mean Average Precision),AP为平均准确率,相当于pr曲线的面积,面积公式表示为,

AP = \int_0^1 p(r)dr

其中,

p(r)

表示precision随recall的变化函数。以为下图为例,pr曲线与坐标轴围成的面积为该组样本的AP值,因为precison和recall的值都在[0,1]区间,显然AP的值也在[0,1]区间。

求解方式

在实践中一般用插值法进行近似求解,此处采用Pascal VOC竞赛中的VOC2010–2012方式求解,近似求解的公式为:

AP \approx \sum{(r_{n+1} - r_n) p_{interp}(r_{n+1})} \tag{1.1}
p_{interp}(r_{n+1}) = \max p( \widetilde r) {\quad}{\quad}{\quad} (\widetilde r \geq r_{n+1}) \tag{1.2}

具体而言,根据p-r值的数量,在每一个点上求插值,

p_{interp}(r_{n+1})

表示

r_{n+1}

右侧(包括

r_{n+1}

)中的最大值。

对不同类别的AP求平均值即为mAP

计算函数

插值计算法参考代码 htTPs://github.com/facebookresearch/detectron2/blob/main/detectron2/evaluation/pascal_voc_evaluation.py#L155

3.4 混淆矩阵

定义

混淆矩阵(confusion matrix),也叫误差矩阵,用于直观的表示分类任务中各个类别的预测情况。

真实\预测

Cat

Dog

Pig

Tiger

Unknown

Cat

15

1

1

Dog

1

2

1

Pig

79

5

Tiger

4

15

3

Unknown

0

0

如上图所示为一个多分类问题的混淆矩阵,纵轴的标签表示某个样本的标注结果,横轴的标签表示某个样本的预测结果。以 [Cat,Cat]=15 为例,这一格表示,在给定的置信度阈值下,有15个标注结果为猫的框被正确分类; [Cat,Pig]=1 则表示,有一个标注结果为猫的框被错误预测为猪;而 [Cat,Unkonwn]=1 则表示,有一个标注结果为猫的样本,模型输出的所有预测结果均未超过给定的阈值,所以分类到Unkonw当中。需要注意的是:这里的Unknow并非一个真实的标签。

计算函数

sklearn库中的混淆矩阵计算函数

htTPs://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html

参考文献

  1. htTPs://jonathan-hui.medium.com/map-mean-average-precision-for-object-detection-45c121a31173
  2. htTPs://en.wikipedia.org/wiki/Confusion_matrix

原文地址:https://cloud.tencent.com/developer/article/2028514

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340