Mean Average Precision(MAP)

本文深入解析了信息检索领域的重要评估指标——平均精度均值(MAP)。通过实例详细介绍了精度(Precision)、平均精度(AP)及平均精度均值(MAP)的计算方法,并探讨了这些指标在搜索引擎和推荐系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:Mean Average Precision(MAP) 作者: EvaLee

【转】一个评测指标就是MAP(Mean Average Precision)平均精度均值


MAP可以由它的三个部分来理解:P,AP,MAP

先说P(Precision)精度,正确率。在信息检索领域用的比较多,和正确率一块出现的是找回率Recall。对于一个查询,返回了一系列的文档,正确率指的是返回的结果中相关的文档占的比例,定义为:precision=返回结果中相关文档的数目/返回结果的数目;
而召回率则是返回结果中相关文档占所有相关文档的比例,定义为: Recall=返回结果中相关文档的数目/所有相关文档的数目。

正确率只是考虑了返回结果中相关文档的个数,没有考虑文档之间的序。对一个搜索引擎或推荐系统而言返回的结果必然是有序的,而且越相关的文档排的越靠前越好,于是有了AP的概念。对一个有序的列表,计算AP的时候要先求出每个位置上的precision,然后对所有的位置的precision再做个average。如果该位置的文档是不相关的则该位置 precision=0.


举个例子(修改了引用[1]的例子):

Prediction   Correctness   Points
1 wrong 0
2 right 1 / 2
3 right 2 / 3
4 wrong 0
5 right 3 / 5
6 wrong 0
7 wrong 0
8 wrong 0
9 right 4 / 9
10 wrong 0
 
可以从中看出AP的计算方法,若该位置返回的结果相关,计算该位置的正确率,若不相关,正确率置为0。 若返回的这四个的相关文档排在1,2,3,4号位,则对于的正确率都为1,AP也就等于1,可见计算方法是对排序位置敏感的,相关文档排序的位置越靠前,检出的相关文档越多,AP值越大。
对MAP,则是对所有查询的AP值求个平均。

得到的计算公式[2]:




r为相关文档的个数, N为查询词的个数。

具体求解:

假设有两个查询,查询1有4个相关文档,查询2有5个相关文档。某系统对查询1检索出4个相关文档,其rank分别为1,2,4,7;对于查询2检索出3个相关文档,其rank分别为1,3,5。

对于查询1,AP平均正确率为:(1/1+2/2+3/4+4/7)/4=0.83

对于查询2,AP平均正确率为:(1/1+2/3+3/5)/5=0.45

 

则平均正确率均值为:(0.83+0.45)/2=0.64

代码:

Github地址:https://github.com/JK-SUN/MLandDM-EvaluationMeasures 欢迎拍砖


参考:

[1]Alternate explanation of Mean Average Precision

[2]信息检索系统导论

[3]Mean Average Precision

### Mean Average Precision (mAP) 的定义 Mean Average Precision (mAP) 是一种广泛用于评估信息检索系统和目标检测模型性能的度量标准。该指标综合考虑了查准率(Precision) 和查全率(Recall),能够更全面地反映系统的整体表现。 在信息检索领域,mAP 表示的是所有查询平均精度的均值[^3]。对于每一个单独的查询请求而言,先计算其对应的 AP 值(Average Precision),再取这些 AP 值的算术平均即得到最终的 mAP 结果。 而在对象检测任务中,mAP 则衡量不同类别上预测框与真实标注框之间的匹配程度。具体来说,针对每一类物体分别统计 TP(True Positive), FP(False Positive) 及 FN(False Negative)[^1]。 ### 计算方法 #### 对于信息检索: 1. 针对单个查询 q,按照文档的相关性得分排序; 2. 根据实际相关情况标记每个返回项是否为正样本; 3. 使用下列公式逐个位置 i 更新当前累计 P@i(Precision at position i),其中 rel(i)=1 若第 i 位是相关项目,否则为0;nrel(q)表示查询q下的总相关数: \[ \text{P}(i|q) = \frac{\sum_{j=1}^{i}\mathrm{rel(j)}}{i},\quad \forall i : \mathrm{rel}(i)=1 \] 4. 将上述过程中获得的所有非零 P@i 平均化作为此查询 Q 下的 AP 值; 5. 最终通过求解所有测试集中各查询下 AP 的简单平均值得到整个数据集上的 mAP。 #### 对象检测中的实现方式略有差异: - 主要区别在于如何判断两个边界框之间是否存在重叠以及设定 IoU(Intersection over Union)阈值来决定真阳性和假阳性。 - 当前普遍采用 COCO 数据集所使用的评价方案,在多个不同的 IoU 阈值水平上来累积 PR 曲线并据此得出每种类别的 AP 后再次做平均形成全局 mAP 指标。 ```python def calculate_map(precisions, recalls): """ Calculate mean average precision given lists of precisions and recalls. Args: precisions (list): List containing precision values. recalls (list): List containing recall values. Returns: float: Calculated MAP value. """ aps = [] unique_recalls = sorted(set(recalls)) for r in unique_recalls: p_interpolated = max([p for p, rec in zip(precisions, recalls) if rec >= r], default=0) aps.append(p_interpolated) return sum(aps)/len(unique_recalls) if len(unique_recalls)>0 else 0 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值