理解NDCG
关于NDCG,wiki给点解释很详细,这里我谈谈我的理解。
NDCG(Normalized discounted cumulative gain):是用来衡量排序质量的指标。
其中一种计算公式如下:

先从理解CG,DCG入手。CG(cumulative gain),累积获得,指的是网页gain的累加。例如:
     
其是个不断累加的值,gain可以使自己定义的一种获得,用来衡量网页的相关性程度,上图中的gain定义如下:

DCG(Discounted Cumulative Gain),Discounted的factor为:

那么,NDCG就是被IDEA DCG规格化的值,即DCG/IDCG。
NDCG如何理解?对于搜索引擎,本质是用户搜一个query,引擎返回一个结果列表,那么如何衡量这个结果列表的好坏?我能够想到的是:
- 我们希望把最相关的结果放到排名最靠前的位置,因为大部分用户都是从上往下阅读的,那么最相关的在前面可以最大程度减少用户的阅读时间;
 - 我们希望整个列表的结果尽可能的和query相关;
 
第一个条件的满足是首要的,而第二个条件的加入是保证整体结果质量,而这两个条件都体现在了NDCG里面,首先,计算NDCG,需要计算Gain,这个gain即是每条结果的质量的定义,NDCG把所有结果相加最终相加保证,整体质量越高的列表NDCG值越大。同时,Discounted的设计使得越靠前的结果权重越大,这保证了第一条,更相关的排在靠前的结果会有更大的NDCG值。从这两点看,以NDCG为优化目标,保证了搜索引擎在返回结果总体质量好的情况下,把更高质量结果排在更前面。
NDCG提供了一种计算方式,当我们有其他排名类似的需求的时候,NDCG都是值得参考的,其Gain以及Discounted的计算的变化可以产生很多其他有价值的metrics
参考文献:
http://en.wikipedia.org/wiki/NDCG
理解NDCG的更多相关文章
- NDCG的理解
		
2019-05-29 14:15:44
 - IR的评价指标-MAP,NDCG和MRR
		
IR的评价指标-MAP,NDCG和MRR MAP(Mean Average Precision): 单个主题的平均准确率是每篇相关文档检索出后的准确率的平均值.主集合的平均准确率(MAP)是每个主 ...
 - (转)GBDT迭代决策树理解
		
在网上看到一篇对从代码层面理解gbdt比较好的文章,转载记录一下: GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Re ...
 - xgboost-python参数深入理解
		
由于在工作中应用到xgboost做特征训练预测,因此需要深入理解xgboost训练过程中的参数的意思和影响. 通过search,https://www.analyticsvidhya.com/blog ...
 - Spark Streaming高级特性在NDCG计算实践
		
从storm到spark streaming,再到flink,流式计算得到长足发展, 依托于spark平台的spark streaming走出了一条自己的路,其借鉴了spark批处理架构,通过批处理方 ...
 - 理解CSS视觉格式化
		
前面的话 CSS视觉格式化这个词可能比较陌生,但说起盒模型可能就恍然大悟了.实际上,盒模型只是CSS视觉格式化的一部分.视觉格式化分为块级和行内两种处理方式.理解视觉格式化,可以确定得到的效果是应 ...
 - 彻底理解AC多模式匹配算法
		
(本文尤其适合遍览网上的讲解而仍百思不得姐的同学) 一.原理 AC自动机首先将模式组记录为Trie字典树的形式,以节点表示不同状态,边上标以字母表中的字符,表示状态的转移.根节点状态记为0状态,表示起 ...
 - 理解加密算法(三)——创建CA机构,签发证书并开始TLS通信
		
接理解加密算法(一)--加密算法分类.理解加密算法(二)--TLS/SSL 1 不安全的TCP通信 普通的TCP通信数据是明文传输的,所以存在数据泄露和被篡改的风险,我们可以写一段测试代码试验一下. ...
 - node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
		
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
 
随机推荐
- iOS模拟器多个虚拟机怎么处理
			
1:关闭Xcode和模拟器 2:$sudo killall -9 com.apple.CoreSimulator.CoreSimulatorService 等待输入密码 3:$rm -f ~/Libr ...
 - Selenium_用selenium webdriver实现selenium RC中的类似的方法
			
最近想总结一下学习selenium webdriver的情况,于是就想用selenium webdriver里面的方法来实现selenium RC中操作的一些方法.目前封装了一个ActionDrive ...
 - If A wants to use B
			
Find the place where B is used, and use C to call C.B RootFrame.Navigated += CheckForResetNavigation ...
 - KindEditor用法介绍
			
KindEditor是一套很方便的html编译器插件.在这里做一个简单的使用介绍. 首先在官网上下载最新的KindEditor文件(里面有jsp,asp等不同版本文件夹,可以删掉你不需要的版本), 把 ...
 - HDU1004之总是wa的细节问题
			
#include <stdio.h> #include <string.h> int main() { ][]; int n, i, k, j, max, max_i; ){ ...
 - Web前端开发基础 第三课(与浏览者交互)
			
来自慕课网,整理 语法: <form method="传送方式" action="服务器文件"> 讲解: 1.<form> :<f ...
 - SSH相关
			
[root@www ~]# vim /etc/ssh/sshd_config# 1. 关于SSH Server 的整体设定,包含使用的port 啦,以及使用的密码演算方式# Port 22# SSH ...
 - 【iCore3 双核心板_FPGA】例程七:基础逻辑门实验——逻辑门使用
			
实验指导书及代码包下载: http://pan.baidu.com/s/1Rs18U iCore3 购买链接: https://item.taobao.com/item.htm?id=52422943 ...
 - P1026 统计单词个数
			
题意 给出一段字符串和一个字典,把字符串划分为n个连续的子串,求一种最优的划分方式使字符串所含单词数最大.(详见NOIp2001) 思路 这个题是一个很典型的线性dp,难点主要在预处理上. 理解题意后 ...
 - 如何在Rails中执行Get/Post/Put请求
			
require 'open-uri' require 'json' require 'net/http' class CoupleController < ApplicationControll ...