【问题标题】:Understanding Precision@K, AP@K, MAP@K了解 Precision@K、AP@K、MAP@K
【发布时间】:2019-04-18 15:01:46
【问题描述】:

我目前正在评估基于隐式反馈的推荐系统。我对排名任务的评估指标有点困惑。具体来说,我希望通过准确率和召回率来进行评估。

Precision@k 的优点是不需要对 相关文档集的大小,但它的缺点是 最不稳定的常用评价措施,它 不平均,因为相关文件的总数 因为查询对 k 处的精度有很大影响

我自己注意到它往往非常不稳定,因此,我想对多个评估日志的结果进行平均。

我在想;假设我运行一个返回以下数组的评估函数:

包含每个用户的precision@k 分数的Numpy 数组。

现在,我的数据集中的所有 precision@3 分数都有一个数组。

如果我取这个数组的平均值并在 20 个不同的分数上取平均值:这是否等同于 Mean Average Precision@KMAP@K 还是我有点太字面理解了?

我正在写一篇带有评估部分的论文,因此定义的准确性对我来说非常重要。

【问题讨论】:

标签: machine-learning recommender-systems


【解决方案1】:

其中涉及到两个平均值,这使得这些概念有些模糊,但它们非常简单 - 至少在 recsys 上下文中 - 让我澄清一下:

P@K

系统的 top-k 推荐中有多少相关项


例如,要计算 P@3:获取给定用户的前 3 个推荐,并检查其中有多少是好的。这个数字除以 3 得到 P@3

AP@K

P@i 对于i=1, ..., K 的平均值。


例如,要计算 AP@3:将 P@1、P@2 和 P@3 相加,然后将该值除以 3

AP@K 通常是为一位用户计算的。

MAP@K

所有用户的 AP@K 平均值。


例如,要计算 MAP@3:对所有用户求和 AP@3,然后将该值除以用户数量

如果你是程序员,可以查看this code,这是Kaggle CTO管理的库ml_metrics的函数apkmapk的实现。

希望对您有所帮助!

【讨论】:

  • 值得注意的是,通常,在计算 AP@K 时,只会对做出相关推荐的 k 值取平均值。这就是链接代码中正在做的事情,也明确了here
  • “例如,要计算 P@3:获取给定用户的前 3 个推荐,并检查其中有多少是好的。” - 模棱两可的答案。你如何确定什么是“好人”?
  • @Alex 据我所知,我们将通过携带任何/多种超参数调整方法来找到 K 的最佳值。例如-:ALS、SGD、SVD 等。如果我错了,请纠正。
  • @alex '好人'是那些相关。有几种方法可以确定一个项目是否相关。例如,如果评分等级是 1-5,也许相关阈值可以设置为 = 这个平均阈值的项目是“相关的”。
  • AP@K = mean(P@1 + P@2 + ... P@K) 的说法是错误的。 Here's a counterexample.
猜你喜欢
  • 1970-01-01
  • 2020-04-05
  • 2011-04-21
  • 2015-10-24
  • 1970-01-01
  • 2015-07-17
  • 2019-07-24
  • 2019-07-01
  • 2019-10-10
相关资源
最近更新 更多