背景

NDCG的全称是:Normalized Discounted Cumulative Gain(归一化折损累计增益),和他的字面意思一样,为了评估一个序列排序的好坏,设计了排序的损失,这就是CG方法,即Cumulative Gain: 表示对K个item的Gain进行累加。CG只是单纯累加相关性,不考虑位置信息。

但是排在不同位置的损失应该是不一样的,如第一个排错和最后几个排错他们的错误代价应该是不等的,list中item的顺序很重要,不同位置的贡献不同,一般来说,排在前面的item影响更大,排在后面的item影响较小。因此需要设计一个带折扣的损失函数,这就是DCG折扣累计。即Discounted Cumulative Gain: 考虑排序顺序的因素,使得排名靠前的item增益更高,对排名靠后的item进行折损。

但是排序列表长度不一样会对结果造成很大的影响,如对浏览器检索的推荐顺序,输入不同关键词推荐出的页面总数可能有很大差别,这会造成页面多的DCG会更大,因而无法对推荐算法进行比较,因此归一化是必要的,因此设计了NDCG。

思想

CG只是单纯累加相关性,不考虑位置信息。而DCG没有考虑到推荐列表和每个检索中真正有效结果个数,所以最后我们引入NDCG(normalized discounted CG),顾名思义就是标准化之后的DCG。

NDCG参考论文:A General Approximation Framework for Direct Optimization of Information Retrieval Measures

        视频讲解链接:l2r-dcg&ndcg_哔哩哔哩_bilibili

原理和计算

1.NDCG 增益函数:

(1)传统方法,一般是用在推荐系统中的,是带有折扣(距离越远折扣越大)和归一化的增益函数。

计算步骤及举例:

1.首先,有五个搜索文件A、B、C、D、E,按照重要程度进行排序,有真实的标签排序和预测的标签0-4进行排序,分别如图为10243、34120,比如B的概率最大,我们就把他排在第0位。

2.然后,按照标签由小到大的顺序对信息进行排序,就类似于百度搜索关键词一样,把最相近的放在前边。

3.接着,按照公式计算DCG和IDCG,DCG是预测的增益折扣计算累计,IDCG是真实标签,即ideal排序的增益累计。

DCG计算为:

IDCG计算为:

我们可以发现,计算的分母的j是按照12345排列的,代表的是一个折扣的递增,越远的信息,折扣越大,分母就是折扣。

而DCG分子2的指数的幂依次对应的是II中的”rank according predict label”的排列对应的I中的true label标签数字,比如II中排在第一个的是B,而B之前的标签是0,因此DCG的第一个分子为2^0-1,以此类推。

IDCG的分子是因为我们就是按照真实地去对IDCG对应的标签排序,其的分子分别为2^4-1,2^3-1,2^2-1...2^0-1。

NDCG等于:

优点:越相关的其越被重视;实现了使用相关性做梯度下降。

延伸与拓展

NDCG经过处理也可以作为损失函数使用,而不仅仅作为评估指标。具体请参考论文:

Learning Relaxed Belady for Content Distribution Network Caching

实现

其中pred_matrix和truth_matrix分别嗲表预测和真实的结果的序列矩阵。

pred_matrix = np.array(pred_matrix)idcg = np.sum(truth_matrix*(1/np.log(np.arange(2,k+2))), axis = 1)dcg = np.sum(pred_matrix*(1/np.log(np.arange(2,k+2))), axis = 1)idcg[idcg == 0] = 1ndcg = dcg/idcgeval_score += np.sum(ndcg)

总结

为了做一个归一化数据,我们在检索的时候,可能返回的数据有很多条,累加的数目不一样,无法对两个搜索模型进行比较,就行在缓存中,当缓存行分别有10条和20条,他们的DCG之和不具有可比性,需要归一化才能定性的比较,这就是NDCG的主要思想。

参考视频链接:l2r-dcg&ndcg_哔哩哔哩_bilibili

推荐系统笔记(三):NDCG Loss原理及其实现相关推荐

  1. Keras笔记(三):目标函数objectives /loss

    注:本文转自 目标函数objectives - Keras中文文档 Keras文档系列 Keras笔记(一):常用函数 Keras笔记(二):优化器optimizers Keras笔记(三):目标函数 ...

  2. 推荐系统笔记(十三):SGL算法的代码实现

    前言         本算法是在LightGCN的代码上的基础实现的,LightGCN的代码和原理参考我前面几篇的博客:推荐系统笔记(六):LightGCN代码实现_甘霖那的博客-CSDN博客 由于L ...

  3. 推荐系统笔记(九):SGL --利用自监督对比学习缓解推荐系统长尾效应

    背景 利用图卷积神经网络处理推荐系统的问题任然有很大局限性,即使是LightGCN也存在的问题,关于LightGCN的知识和原理实现可以参考我的另外几篇博客:链接 其局限性主要在于: (1)高度节点对 ...

  4. 读书笔记:理论生态学原理及应用(一)——合作的机制

    此篇读书笔记对应于<Theoretical Ecology Principles and Applications>第三版第二章--How populations cohere: five ...

  5. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  6. 推荐系统笔记:基于非负矩阵分解的协同过滤

    1 非负矩阵分解 非负矩阵分解 (NMF) 可用于非负的评级矩阵. 这种方法的主要优势不一定是准确性,而是它在理解用户-项目交互方面提供的高度可解释性. 与其他形式的矩阵分解的主要区别在于因子 U 和 ...

  7. 打造工业级推荐系统(三):推荐系统的工程实现与架构优化

    打造工业级推荐系统(三):推荐系统的工程实现与架构优化 gongyouliu 阅读数:4148 2019 年 4 月 26 日 导读:个性化推荐系统,简单来说就是根据每个人的偏好推荐他喜欢的物品.互联 ...

  8. 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9313239 作者:七十一雾央 新浪微博:http:// ...

  9. 知识图谱论文阅读(八)【转】推荐系统遇上深度学习(二十六)--知识图谱与推荐系统结合之DKN模型原理及实现

    学习的博客: 推荐系统遇上深度学习(二十六)–知识图谱与推荐系统结合之DKN模型原理及实现 知识图谱特征学习的模型分类汇总 知识图谱嵌入(KGE):方法和应用的综述 论文: Knowledge Gra ...

最新文章

  1. P5431 【模板】乘法逆元2(小学数学题,毒瘤鱼,卡常之王yyds)
  2. Hibernate in action阅读笔记-吵吵冷饭-ORM
  3. bootstrap 全局 CSS 样式
  4. aapt: error while loading shared libraries: libstdc++.so.6: wrong ELF class: ELFCLASS64
  5. linux shell $# $* $@ $?
  6. 32位十六进制浮点数转换为十进制浮点数的方法
  7. 低通滤波器算法实现_控制算法手记自抗扰控制的几点思考
  8. 7005.element-ui组件
  9. UML--行为图(状态图、活动图)
  10. C语言中scanf和printf格式化输入输出
  11. linux模拟手柄输入,Steam 输入手柄模拟最佳实践
  12. c语言编写矩阵逆置乘法,200个c语言实例的源码
  13. 微信小程序考勤签到管理系统+后台管理系统
  14. STM32F103_study48_The punctual atoms(STM32 Serial communication experiment )
  15. JS中attr和prop区别
  16. 无人驾驶卡车开上干线,嬴彻科技、主线科技们如何拿下产业化赛点?
  17. 【应届生笔试资料分享二】中国农业银行相关介绍汇总
  18. 用Python自定义一个时钟类、定时任务类
  19. 安装桌面Linux系统总结
  20. ESP-Prog 下载与调试板介绍

热门文章

  1. 【华为云技术分享】浅谈服务化和微服务化(下)
  2. Mac下的Chrome浏览器系统为英文状态下切换为中文,中英切换
  3. 〖Python APP 自动化测试实战篇⑦〗- 实战 - appium 定位手机元素的超级方法 - uiautomator
  4. (赛后补题)Gym - 101020 H H - Weekend
  5. 幼儿应不应该使用计算机,该不该对幼儿进行电脑教育?
  6. 重装系统(二):进入BIOS并了解其界面相关信息
  7. word自带公式编辑
  8. ubuntu16.04软件安装使用教程
  9. 软件设计师——软件工程
  10. 数组中某个元素相同的去重_几种去除数组中重复元素的方法、数组去重