【问题标题】:Confusion about (Mean) Average Precision关于(平均)平均精度的困惑
【发布时间】:2017-04-15 20:33:50
【问题描述】:

this 问题中,我询问了有关精确召回曲线的说明。

特别是,我问我们是否必须考虑固定数量的排名来绘制曲线,或者我们可以合理地选择自己。根据answer,第二个是正确的。

但是现在我对平均精度 (AP) 值有很大的疑问:AP 用于在数值上估计我们的算法在给定特定查询的情况下有多好。平均平均精度 (MAP) 是多个查询的平均精度。

我的疑问是:如果 AP 根据我们检索到的对象数量而变化,那么我们可以调整此参数以发挥我们的优势,以便我们显示可能的最佳 AP 值。例如,假设 p-r 曲线在 10 个元素之前表现出色,然后非常糟糕,我们可以“欺骗”计算仅考虑前 10 个元素的 (M)AP 值。

我知道这可能听起来令人困惑,但我在任何地方都没有找到任何相关信息。

【问题讨论】:

    标签: mean information-retrieval content-based-retrieval average-precision


    【解决方案1】:

    AP是precision-recall曲线下的面积,precision-recall曲线应该是在整个返回的排序列表上计算的。

    无法通过调整返回排名列表的大小来欺骗 AP。 AP 是精确召回曲线下方的区域,它将精确度绘制为召回率的函数,其中召回率是返回的正数相对于地面实况中存在的正数的总数,而不是相对于真实数据中的正数的数量返回列表。因此,如果您裁剪列表,您所做的就是裁剪精确召回曲线并忽略绘制其尾部。由于 AP 是曲线下的区域,因此裁剪列表会减少 AP,因此调整排名列表大小没有任何智慧 - 如果返回整个列表,则可以实现最大 AP。例如,您可以从 the code you cited in your other question 看到这一点 - 裁剪列表仅对应于

    for ( ; i<ranked_list.size(); ++i) {
    

    改成

    for ( ; i<some_number; ++i) {
    

    这导致ap 的增量减少(所有增量都是非负的,因为old_precisionprecision 是非负的,recall 是非递减的),因此 AP 值更小。

    实际上,出于纯粹的计算原因,您可能希望将列表裁剪为某个合理的数字,例如10k,因为 AP 不太可能发生太大变化,因为 precision@large_number 可能为 0,除非您有异常大量的阳性结果。

    您的困惑可能与某些流行函数的方式有关,例如 VLFeat 的 vl_pr 计算精确召回曲线,因为他们假设您已经向他们提供了整个排名列表,因此计算了通过只查看排名列表而不是基本事实本身来查看基本事实。因此,如果您在裁剪列表上天真地使用vl_pr,您确实可以欺骗它,但这将是一个无效的计算。我同意从函数的描述中不是 100% 清楚,但是如果您更详细地检查documentation,您会看到它提到了NUMNEGATIVESNUMPOSITIVES,所以如果您给出的排名列表不完整你应该设置这两个量,让函数知道如何正确计算精确召回曲线/AP。现在,如果您使用vl_pr 绘制排名列表的不同作物,但对所有函数调用使用相同的 NUMNEGATIVES 和 NUMPOSITIVES,您会看到精确召回曲线只是彼此的作物,正如我在上面解释的(我还没有检查这个,因为我这里没有 matlab,但我确定是这样,如果不是,我们应该提交一个错误)。

    【讨论】:

    • 我明白你的回答,再次感谢你一如既往。我正在牛津建筑数据集上测试 VLFeat VLAD,所以由于整个数据集大约有 5k 个图像,我会将它们作为ranked_list 全部传递给this 代码;)一开始我认为我们只需要传递前 10 个(或类似的)图像作为ranked_list,现在我将通过所有5k!再次感谢!
    【解决方案2】:

    你说的是部分正确的。如果您在顶部N 检索到的文档中获得合理的 MAP 或 AP,那很好。这不是作弊,因为您的 IR 系统在顶部 N 返回的文档中检索了大量相关文档,但是是的,它仍然缺少一些相关文档。 请注意,对于 IR 系统来说,如果它不能检索所有相关文档,而是将所有检索到的相关文档排在更高的排名,这就是 AP 衡量的,那么它会更好。(更高的排名意味着排名 1 或 2,而不是100 或 101)

    考虑一个示例,您有两个相关文档,一个在排名 1 返回,另一个在排名 50 返回。现在,如果您计算前 10 个返回文档的 MAP 或 AP,那么您必须将答案报告为MAP@10AP@10。通常,AP 表示所有返回文档的平均精度,但如果您考虑顶部的 N 文档,您的指标将是 AP@N 而不仅仅是 AP,请注意,这不是作弊!但是,如果您计算AP@N 并报告为 AP,那么您将向读者提供部分信息。

    关于 MAP 的重要事实是 - 如果从未检索到相关文档,我们假设与该相关文档对应的精度为零。在计算 AP 时,我们将累积精度除以相关文档总数。因此,当您计算MAP@NAP@N 时,这意味着您只关心IR 系统返回的顶部N 文档。例如,我在one of my research works 中使用了MAP@100

    如果您对 AP 或 MAP 有疑问,可以查看我的简短回答 here。希望它能帮助您澄清您的困惑。

    【讨论】:

    • 非常感谢,这完全澄清了任何疑问。在thisthisthis 的论文中报告MAP 而不是MAP@N,我只是有点惊讶。不过,没关系,我会按照你的指示,再次感谢!
    猜你喜欢
    • 2020-09-30
    • 1970-01-01
    • 2018-01-14
    • 2019-04-09
    • 2015-01-09
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多