在k 处计算的平均精度(对于答案中的前 k 个元素),根据wiki、kaggle 处的 ml 指标和这个答案:关于(平均)平均精度的混淆应该计算为 k 处平均精度的平均值,其中平均值k 处的精度计算如下:
其中: P(i) 是列表中截止点 i 处的精度;rel(i) 是一个指标函数,如果排名 i 的项目是相关文档,则等于 1,否则为零。
分隔符min(k, number of relevant documents)的含义是答案中相关条目的最大可能数量。
这种理解是否正确?
MAP@k 是否总是小于为所有排名列表计算的 MAP?
我担心的是,这不是在许多作品中计算 MAP@k 的方式。
通常,分隔符不是min(k, number of relevant documents),而是top-k中相关文档的数量。这种方法将提供更高的 MAP@k 值。
HashNet:通过继续深度学习哈希”(ICCV 2017)
代码:https : //github.com/thuml/HashNet/blob/master/pytorch/src/test.py#L42-L51
    for i in range(query_num):
        label = validation_labels[i, :]
        label[label == 0] = -1
        idx = ids[:, i]
        imatch = np.sum(database_labels[idx[0:R], :] == …python matlab information-retrieval average-precision precision-recall
在这个问题中,我询问了关于精确回忆曲线的说明.
特别是,我问我们是否必须考虑固定数量的排名来绘制曲线,或者我们可以合理地选择自己.根据答案,第二个是正确的.
然而,现在我对平均精度(AP)值存在很大疑问:AP用于在数值上估计给定特定查询的算法有多好.平均平均精度(MAP)是多个查询的平均精度.
我的疑问是:如果AP根据我们检索的对象数量而变化,那么我们可以将此参数调整为我们的优势,因此我们可以显示最佳AP值.例如,假设pr曲线精确地执行直到10个元素然后可怕,我们可以"欺骗"计算(M)AP值,仅考虑前10个元素.
我知道这听起来很混乱,但我在任何地方都没有找到任何相关信息.
information-retrieval mean content-based-retrieval average-precision
我正在训练一个 keras 模型,该模型将项目嵌入作为对并输出二进制分类(接近 word2vec)。我需要在每个 epoch 之后找到推荐系统模型的 mAP,以便能够进行比较。除了每次使用新嵌入从头开始计算之外,我真的找不到其他方法。如果有人有办法,我将不胜感激。
precision average-precision precision-recall keras recommender-systems
我正在比较计算随机数平均值的两种算法.
我想这里没有革命性的东西,我不是数学家,所以我不能在这两个算法上加上名字.
这是我的代码:
#include <iostream>
#include <iomanip>
#include <cstdlib>
class Average1
{
public:
    Average1() : total( 0 ), count( 0 ) {}
    void add( double value )
    {
        total += value;
        count++;
    }
    double average()
    {
        return total/count;
    }
private:
    double total;
    size_t count;
};
class Average2
{
public:
    Average2() : av( 0 ), count( 0 ) {}
    void add( double value )
    {
        av = (av*count + value)/(count+1);
        count++;
    }
    double average()
    {
        return av;
    }
private: …我是阵列编程的新手,发现很难解释sklearn.metrics label_ranking_average_precision_score函数。需要您的帮助以了解其计算方式,并感谢您学习Numpy数组编程的任何技巧。
通常,我知道精度是
((正数)/(正数+误数))  
我问这个问题的原因是,我偶然发现了Kaggle音频标记竞赛,并发现这篇帖子说,当响应中有多个正确的标签时,他们正在使用LWRAP函数计算分数。我开始阅读以了解该分数是如何计算的,并发现难以解释。我的两个困难是
1)从文档解释Math函数,我不确定分数计算中如何使用排名
2)从代码解释Numpy数组操作
我正在读取的函数来自Google Collab文档,然后尝试阅读文档在sklearn,但无法正确理解。
一个样本计算的代码是
# Core calculation of label precisions for one test sample.
def _one_sample_positive_class_precisions(scores, truth):
  """Calculate precisions for each true class for a single sample.
  Args:
    scores: np.array of (num_classes,) giving the individual classifier scores.
    truth: np.array of (num_classes,) bools indicating which classes are true.
  Returns:
    pos_class_indices: np.array of indices of the true classes for this sample.
    pos_class_precisions: np.array of precisions corresponding to each of those
      classes.
  """ …python numpy scikit-learn average-precision multilabel-classification
问题是,它基于for循环,而且速度很慢:
require('Metrics')
require('rbenchmark')
actual <- 1:20000
predicted <- c(1:20, 200:600, 900:1522, 14000:32955)
benchmark(replications=10,
          apk(5000, actual, predicted),
          columns= c("test", "replications", "elapsed", "relative"))
                          test replications elapsed relative
1 apk(5000, actual, predicted)           10   53.68        1
我对如何对这个函数进行矢量化感到困惑,但我想知道是否有更好的方法在R中实现它.