推荐系统笔记(三):NDCG Loss原理及其实现
背景
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原理及其实现相关推荐
- Keras笔记(三):目标函数objectives /loss
注:本文转自 目标函数objectives - Keras中文文档 Keras文档系列 Keras笔记(一):常用函数 Keras笔记(二):优化器optimizers Keras笔记(三):目标函数 ...
- 推荐系统笔记(十三):SGL算法的代码实现
前言 本算法是在LightGCN的代码上的基础实现的,LightGCN的代码和原理参考我前面几篇的博客:推荐系统笔记(六):LightGCN代码实现_甘霖那的博客-CSDN博客 由于L ...
- 推荐系统笔记(九):SGL --利用自监督对比学习缓解推荐系统长尾效应
背景 利用图卷积神经网络处理推荐系统的问题任然有很大局限性,即使是LightGCN也存在的问题,关于LightGCN的知识和原理实现可以参考我的另外几篇博客:链接 其局限性主要在于: (1)高度节点对 ...
- 读书笔记:理论生态学原理及应用(一)——合作的机制
此篇读书笔记对应于<Theoretical Ecology Principles and Applications>第三版第二章--How populations cohere: five ...
- tensorflow学习笔记(三十二):conv2d_transpose (解卷积)
tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...
- 推荐系统笔记:基于非负矩阵分解的协同过滤
1 非负矩阵分解 非负矩阵分解 (NMF) 可用于非负的评级矩阵. 这种方法的主要优势不一定是准确性,而是它在理解用户-项目交互方面提供的高度可解释性. 与其他形式的矩阵分解的主要区别在于因子 U 和 ...
- 打造工业级推荐系统(三):推荐系统的工程实现与架构优化
打造工业级推荐系统(三):推荐系统的工程实现与架构优化 gongyouliu 阅读数:4148 2019 年 4 月 26 日 导读:个性化推荐系统,简单来说就是根据每个人的偏好推荐他喜欢的物品.互联 ...
- 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9313239 作者:七十一雾央 新浪微博:http:// ...
- 知识图谱论文阅读(八)【转】推荐系统遇上深度学习(二十六)--知识图谱与推荐系统结合之DKN模型原理及实现
学习的博客: 推荐系统遇上深度学习(二十六)–知识图谱与推荐系统结合之DKN模型原理及实现 知识图谱特征学习的模型分类汇总 知识图谱嵌入(KGE):方法和应用的综述 论文: Knowledge Gra ...
最新文章
- P5431 【模板】乘法逆元2(小学数学题,毒瘤鱼,卡常之王yyds)
- Hibernate in action阅读笔记-吵吵冷饭-ORM
- bootstrap 全局 CSS 样式
- aapt: error while loading shared libraries: libstdc++.so.6: wrong ELF class: ELFCLASS64
- linux shell $# $* $@ $?
- 32位十六进制浮点数转换为十进制浮点数的方法
- 低通滤波器算法实现_控制算法手记自抗扰控制的几点思考
- 7005.element-ui组件
- UML--行为图(状态图、活动图)
- C语言中scanf和printf格式化输入输出
- linux模拟手柄输入,Steam 输入手柄模拟最佳实践
- c语言编写矩阵逆置乘法,200个c语言实例的源码
- 微信小程序考勤签到管理系统+后台管理系统
- STM32F103_study48_The punctual atoms(STM32 Serial communication experiment )
- JS中attr和prop区别
- 无人驾驶卡车开上干线,嬴彻科技、主线科技们如何拿下产业化赛点?
- 【应届生笔试资料分享二】中国农业银行相关介绍汇总
- 用Python自定义一个时钟类、定时任务类
- 安装桌面Linux系统总结
- ESP-Prog 下载与调试板介绍