gpt4 book ai didi

information-retrieval - 平均精度的正确版本是什么?

转载 作者:行者123 更新时间:2023-12-04 08:24:02 26 4
gpt4 key购买 nike

我正在尝试计算 Average Precision (和 Mean Average Precision )在 Oxford Building image dataset 上.

下面是他们提供的用于计算平均精度的代码。请注意 pos_set是来自地面训练集的“最佳”和“良好”图像的并集,而 junk_set是一组不相关的图像。

void OxfordTest::computeAp(std::vector<std::string> &ranked_list){
float old_recall = 0.0;
float old_precision = 1.0;
float ap = 0.0;

size_t intersect_size = 0;
size_t i = 0;
size_t j = 0;
for ( ; i<ranked_list.size(); ++i) {
if(!pos_set.count(ranked_list[i]))
std::cin.get();
}
if (junk_set.count(ranked_list[i])) continue;
if (pos_set.count(ranked_list[i])) intersect_size++;

float recall = intersect_size / (float)pos_set.size();
float precision = intersect_size / (j + 1.0);

ap += (recall - old_recall)*((old_precision + precision)/2.0);

old_recall = recall;
old_precision = precision;
j++;
}
}

这与链接的维基百科页面上给出的概念完全不同。 这些概念之间有什么关联?

我非常确定维基百科的概念是正确的,因为它与此 answer 中给出的一致。和 this文章。

我不明白为什么在上面的代码中报告了它:
  • 召回,而维基百科的概念只包括最后一个公式中的精度。
  • 即使考虑具有 delta 召回率的公式,也没有人谈论 `(old_precision + precision)/2

  • This is the C++ original code.

    最佳答案

    垃圾套装

    原论文指出:

    (3) Junk – less than 25% of the object
    is visible, or there is a very high level of occlusion or distortion.
    (4) Absent – the object is not present

    IE。垃圾图片 不是负数 .有正面(OK+Good),忽略(Junk)和负面(Absent)。请注意,所有这些都是 每个查询 ,即某些图像对于查询 1 来说是垃圾,但对于查询 15 来说不是。如果您查看“垃圾”图像,您会看到模棱两可的示例,例如某些情况下会出现极端缩放或模糊,这会让您思考此图像是否包含查询的地标,以及只有一小部分对象可见因此图像太硬的情况。
    In computing the average precision, we use the Good and
    Ok images as positive examples of the landmark in question,
    Absent images as negative examples and Junk images
    as null examples. These null examples are treated as though
    they are not present in the database – our score is unaffected
    whether they are returned or not.

    因此,作者将垃圾集定义为既非正数也非负数 - 图像最有可能描绘了查询的对象,但对于其中一些我们不确定,或者将它们视为正数并要求系统检索太苛刻了这些例子(因此如果不这样做会受到惩罚)。同时,将它们视为否定也很苛刻,就好像系统确实检索了它们一样,不应该受到惩罚。因此,需要做的就是(在每个查询的基础上)忽略垃圾并将它们视为不存在。因此,您获取检索到的列表,过滤掉此查询的所有垃圾图像,然后在此过滤列表上运行正常的 AP 计算。这就是代码所做的有效工作 - 当示例在 amb(=junk) 中时,它只是被跳过。然后,如果示例不在 amb 中,如果它在 pos(itives) 中,则 intersect_size(直到位置 i 的当前正数)递增。数量 j (嗯,j-1) 是列表中未跳过元素的数量(仅当当前元素不是垃圾时才会增加)。

    AP计算

    您肯定需要 AP 计算中的召回率,正如 shiri 在上一个答案中所解释的那样,并且如您的文章中所述,p(r) 是特定召回率的精度。考虑 AP 的最好方法不是检查随机公式,而是了解直觉是什么,然后看看公式如何捕捉它,即维基百科开头所说的:您可以将精度绘制为召回率的函数,而 AP那么就是曲线下的面积。您希望所有召回的精度都很高,因此理想曲线是 p(r)=1,这将使 AP 最大化。

    那么代码在做什么呢?它使用梯形规则计算精度-召回曲线下的面积,参见 this equation on Wikipedia你会看到它与代码相同。维基百科文章中离散情况的 AP 计算是(常用的)精确召回曲线下面积的更差近似值, rectangle method .

    关于information-retrieval - 平均精度的正确版本是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41269059/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com