评价指标Precision(精度)和Recall(召回率)以及AP0.5、AP0.75、AP0.9的理解

非常感谢原作者得文章让我对iou Precision(精度)和Recall(召回率)以及map有了更清晰得了解。
下文是我的一些理解,仅供自己做笔记使用
1.IOU的概念
IOU即交并比,也是预测框和真实框的比值,他的算法可如下图所示

在这里插入图片描述
2.TP TN FP FN的概念
T或者N代表的是该样本是否被分类分对,P或者N代表的是该样本被分为什么

TP(True Positives)意思我们倒着来翻译就是“被分为正样本,并且分对了”,TN(True Negatives)意思是“被分为负样本,而且分对了”,FP(False Positives)意思是“被分为正样本,但是分错了”,FN(False Negatives)意思是“被分为负样本,但是分错了”。

按下图来解释,左半矩形是正样本,右半矩形是负样本。一个2分类器,在图上画了个圆,分类器认为圆内是正样本,圆外是负样本。那么左半圆分类器认为是正样本,同时它确实是正样本,那么就是“被分为正样本,并且分对了”即TP,左半矩形扣除左半圆的部分就是分类器认为它是负样本,但是它本身却是正样本,就是“被分为负样本,但是分错了”即FN。右半圆分类器认为它是正样本,但是本身却是负样本,那么就是“被分为正样本,但是分错了”即FP。右半矩形扣除右半圆的部分就是分类器认为它是负样本,同时它本身

### 平均精度 (Average Precision, AP) 的概念与计算 #### Average Precision (AP) 的定义 平均精度是一种用于评估分类器性能的指标,特别是在信息检索目标检测领域中广泛应用。它衡量的是在不同阈值下模型的精确度(Precision)表现如何随着召回率Recall)变化的趋势。 具体来说,AP 是通过计算多个不同的召回率水平下的精确度并取加权平均值得到的结果[^1]。这种权重通常由相邻两个召回率之间的差值决定。 #### AP 的计算方法 对于二分类问题或者多标签分类中的单个类别而言,可以按照以下方式来计算 AP: 1. **排序预测结果** 首先根据模型给出的概率分数对测试集样本进行降序排列。 2. **逐步计算 Precision Recall** 对每一个正类别的实例位置 i,分别统计前 i 个样本中有多少个真正例,并据此计算当前时刻的 precision \( P(i) \) recall \( R(i) \)[^3]。 \[ P(i) = \frac{\text{True Positives at rank } i}{\text{i}} \] \[ R(i) = \frac{\text{True Positives at rank } i}{\text{Total True Positives}} \] 3. **插值法求解 AP 值** 使用一种称为“十一级插值”的方法,在固定的回忆率点上找到对应的最高精确率作为该点上的贡献值。最终将这些固定点处得到的最大精确率相加以获得整个曲线下面围成区域大小即为 AP 值[^2]: \[ AP = \sum_{r=0}^{1} (\max(P(r))) * dR \] 这里 \(dR\) 表示每一步增加的小量回忆率增量,默认情况下可设为 0.1 单位间隔。 另外还有一种简化形式适用于连续型数据分布情形,则直接采用积分近似代替离散累加操作: \[ AP = \int_0^1 P(R)\;dR \] 这实际上代表了 PR 曲线底边所覆盖总面积的一部分比例关系。 #### 应用场景 - **信息检索**: 在搜索引擎优化过程中用来判断某个查询返回的相关文档质量好坏程度; - **图像识别&物体侦测**: 如 COCO 数据集中广泛使用的评价标准之一便是基于此类原理构建而成——mAP@IoU(Intersection over Union),表示针对特定交并比门限条件下各类别综合得分情况汇总后的总体表现指数; - **推荐系统**: 测定用户可能感兴趣项目列表里实际点击次数占比高低趋势走向等等多种场合均有涉及此技术手段的应用实践案例存在。 ```python def compute_ap(recalls, precisions): """ Compute the average precision from lists of recalls and precisions. Args: recalls: List[float], sorted ascendingly between [0, 1]. precisions: List[float], corresponding to each recall value. Returns: float, representing computed AP score. """ ap_sum = 0.0 prev_recall = 0.0 for r_idx in range(len(recalls)): max_precision_for_r = max(precisions[r_idx:]) delta_recall = recalls[r_idx] - prev_recall ap_sum += max_precision_for_r * delta_recall prev_recall = recalls[r_idx] return round(ap_sum, ndigits=4) # Example Usage example_recalls = [0., 0.1, 0.2, 0.4, 0.6, 0.8, 1.] example_precisions = [1., 0.9, 0.75, 0.6, 0.5, 0.4, 0.3] print(compute_ap(example_recalls, example_precisions)) # Output should be close to ~0.525 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值