machine-learning - 了解 Precision@K、AP@K、MAP@K
问题描述
我目前正在评估基于隐式反馈的推荐系统。我对排名任务的评估指标有点困惑。具体来说,我希望通过精确度和召回率来评估。
Precision@k 的优点是不需要对相关文档集的大小进行任何估计,但缺点是它是常用评估措施中最不稳定的,并且它的平均效果不好,因为相关文档的总数因为查询对 k 处的精度有很大影响
我自己注意到它往往非常不稳定,因此,我想对多个评估日志的结果进行平均。
我在想; 假设我运行一个返回以下数组的评估函数:
Numpy 数组包含每个用户的precision@k 分数。
现在,我的数据集中的所有precision@3分数都有一个数组。
如果我取这个数组的平均值,然后取 20 个不同分数的平均值:这是否等同于平均精度@K或MAP@K,还是我理解的有点过于字面意思?
我正在写一篇带有评估部分的论文,所以定义的准确性对我来说非常重要。
解决方案
涉及到两个平均值,这使得这些概念有些模糊,但它们非常简单 - 至少在 recsys 上下文中 - 让我澄清一下:
P@K
系统的 top-k 建议中存在多少相关项
例如,计算 P@3:获取给定用户的前 3 个推荐,并检查其中有多少是好的。这个数字除以 3 得到 P@3
美联社@K
i=1, ..., K的P@i的平均值。
例如,要计算 AP@3:将P@1、P@2 和 P@3 相加,然后将该值除以 3
AP@K 通常针对一位用户计算。
MAP@K
所有用户的 AP@K 平均值。
例如,要计算 MAP@3:将所有用户的 AP@3 相加,然后将该值除以用户数量
如果您是程序员,您可以查看此代码,它是Kaggle 的 CTO 维护的库的功能apk
和实现。mapk
ml_metrics
希望它有所帮助!
推荐阅读
- maven - 使用来自 maven 的 JavaFX11 构建可执行 JAR
- spring-boot - 在 Spring Boot 中使用 ConfigurationProperties
- c++ - is_invocable_r 忽略返回参数
- for-loop - 有值的列表。如果项目多次存在,增加价值?
- windows - 如何理解 Windows 日志信息?
- reactjs - React:React-Palette“元素类型无效:需要一个字符串但得到:对象。”
- visual-studio - 为什么 Unity Visual Studio 在我创建新项目时无法识别“Using MlAgents”,但在演示项目中可以识别?
- ruby-on-rails - 我正在尝试写一篇简单的博客文章,但 .erb 文件中的字段未显示
- javascript - 部署 Firebase 云函数时出错每个 then() 都应该返回一个值或抛出
- sql - 编写 SQL 选择语句来计算 12 月份支付给销售员工的佣金