algorithm - 为什么基于排名的推荐使用 NDCG?

标签 algorithm machine-learning recommendation-engine

基于排名的推荐系统使用 NDCG 来评估推荐的准确性。但是,有时会使用准确率和召回率来评估 top-n 推荐。是不是NDCG高,准确率就高?但是我运行了一个ListRankMF算法,在movelens 100k数据集上准确率很低,只有8%左右。 NDCG与准确率有什么关系?

最佳答案

当推荐系统的目标是返回一些相关结果并且顺序很重要时,NDCG 最有用。比如推荐翻译,或者推荐银行账户。如果我们错过相关结果并没有什么害处,但为了良好的用户体验,我们希望它们按有意义的顺序排列。

当推荐系统的目标是返回所有相关结果且顺序不重要时,召回率最有帮助。例如,潜在的医疗诊断或处方。如果我们错过了相关结果,那将是有害的,因为那可能是正确的诊断或治疗方法。顺序并不重要,因为我们希望医生通读所有可能性并利用他们的专业知识做出最终决定。

假设有 5 种药物我们可以推荐医生给患者使用(A 到 E),还有 5 种我们不应该推荐(F 到 J)。我们的推荐系统输出推荐 A、B、C、D。这给了我们以下评估:

  • NDCG = 1.0
  • 召回率 = 0.8

在这种情况下,记忆清楚地表明我们没有做到最好(因为我们没有推荐药物 E),而 NDCG 让我们相信我们做出了完美的推荐。

如果我们改为推荐书籍,那么 NDCG 会更合适。由于可能有数百本相关书籍,因此召回并不能提供太多信息,但我们不能指望用户阅读数百本书的列表后只选择一本阅读。 NDCG 会告诉我们,我们是否至少在推荐一些可能的有意义的子集。

关于algorithm - 为什么基于排名的推荐使用 NDCG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34252298/

相关文章:

c++ - 在 C++11 中使用 sort 函数有什么问题?

python - Tensorflow Estimator API 输入张量名称

performance - VowpalWabbit:差异和可扩展性

php - 提高 Neo4j 速度的建议

java - 应用技术集所需的建议/建议

algorithm - 如果变量是相同的存储位置,为什么 XOR 交换算法会失败,但如果变量是相同的值则不会

algorithm - 用于从开始和结束添加/删除的高效数据结构,应支持随机访问

c# - 如何检查字节数组是否包含另一个数组

python - Sklearn train_test_split 创建一维数组

java - Mahout 是实时工作还是根据算法规则预处理数据?