https://blog.csdn.net/u014313009/article/details/38944687

SIGIR的一篇推荐算法论文中提到用NDCG和AUC作为比较效果的指标,之前没了解过这两个指标,便查找相关概念,整理如下。

一、NDCG
1.DCG
       首先,介绍一下DCG。DCG的全称是Discounted Cumulative Gain,它是衡量搜索引擎算法的一个指标。搜索引擎一般采用PI(per item)的方式进行评测,即逐条对搜索结果进行等级的打分。比如在Google搜索到一个词,得到5个结果。我们对这些结果进行3个等级的区分:Good、Fair、Bad,对应的分值分别是3、2、1。假设这5个结果的分值分别是3、1、2、3、2。
       使用DCG这个统计方法有两个前提:
       (1) 在搜索页面中,相关度越高的结果排在前面越好。
       (2) 在PI标注时,等级高的结果比等级低的结果好。
在一个搜索结果的list里面,假设有两个结果的评级都是Good,但是第一个排在第一位,第二个排在第40位,虽然等级是一样的,但排在40位的那个结果被用户看到的概率比较小,对整个页面的贡献也要比第一个结果小很多。所以第二个结果的得分应该有所减少。DCG的计算公式如下:

其中,就是第 i 个结果的得分。 
2. NDCG
       因为不同的搜索结果的数量很可能不相等,所以不同搜索的DCG值不能直接做对比。解决的方法是比较NDCG。NDCG的定义如下:

IDCG(Ideal DCG),即理想的DCG。举上面的例子来说,5个搜索结果的分值是3、1、2、3、2,那么DCG = 3 + (1+1.26+1.5+0.86 )=7.62。
       而IDCG下的分值排列顺序是3、3、2、2、1,所以IDCG=3 + (3+1.26+1+0.43)=8.69。
       所以,NDCG = DCG / IDCG = 0.88。

二、AUC
1. ROC曲线
       ROC分析的是二元分类模型,即输出结果只有两种类别的模型。ROC空间将伪阳性率(FPR,False Position Rate)定为X轴,真阳性率(TPR,True Position Rate)定为Y轴。
      TPR = TP / ( TP + FN),表示在所有实际为阳性的样本中,被正确判断为阳性的比例。(TP:真阳性,FN:伪阴性)
       FPR = FP / ( FP + TN),表示在所有实际为阴性的样本中,被正确判断为阴性的比例。(TN:真阴性,FP:伪阳性)

对于包含100个阳性和100个阴性的样本,以下是4个分类器的结果:

其中,ACC表示准确率。可以把这四个分类器映射成ROC空间中的一个点,如下图所示:

可以发现两个规律:(1) 越靠近左上角的点,准确率越高。(2) 如果点位于(0,0)和(1,1)的连线下方,那么一个有效的补救方法是把所有预测结果反向(即,如果输出结果为正类,则最终判定为负类;如果输出结果为负类,则判定为正类)。
       在同一个分类器内,设置不同的阈值则会产生不同的坐标,这些坐标连成的曲线叫做ROC曲线。
       当阈值被设定为最高时,所有的样本都被预测为阴性,所以FP=0,TP=0,此时的FPR = FP / (FP+TN)=0,TPR = TP / (TP+FN) =0。这是坐标为(0,0)。
       当阈值被设定为最低时,所有样本都被预测为阳性,同理可得:FPR=1,TPR=1,坐标为(1,1)。所以ROC曲线经过了(0,0)和(1,1)。

2. AUC
       ROC曲线示例如下:

为了比较分类器的好坏,就将每个曲线下的面积作为比较,面积越大,则分类器效果越好。其中,这个面积就叫做AUC,全称是Area Under the roc Curve(ROC曲线下面积)。
————————————————
版权声明:本文为CSDN博主「__鸿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014313009/article/details/38944687

NDCG、AUC介绍的更多相关文章

  1. ROC和AUC介绍以及如何计算AUC ---好!!!!

    from:https://www.douban.com/note/284051363/?type=like 原帖发表在我的博客:http://alexkong.net/2013/06/introduc ...

  2. 【转】ROC和AUC介绍以及如何计算AUC

    转自:https://www.douban.com/note/284051363/ ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器( ...

  3. ROC和AUC介绍以及如何计算AUC

    原文:http://alexkong.net/2013/06/introduction-to-auc-and-roc/ 为什么使用ROC曲线 既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因 ...

  4. 使用Python画ROC曲线以及AUC值

    from:http://kubicode.me/2016/09/19/Machine%20Learning/AUC-Calculation-by-Python/ AUC介绍 AUC(Area Unde ...

  5. AUC,KS,ROC

    要弄明白ks值和auc值的关系首先要弄懂roc曲线和ks曲线是怎么画出来的.其实从某个角度上来讲ROC曲线和KS曲线是一回事,只是横纵坐标的取法不同而已.拿逻辑回归举例,模型训练完成之后每个样本都会得 ...

  6. XGBoost:在Python中使用XGBoost

    原文:http://blog.csdn.net/zc02051126/article/details/46771793 在Python中使用XGBoost 下面将介绍XGBoost的Python模块, ...

  7. XGBoost和LightGBM的参数以及调参

    一.XGBoost参数解释 XGBoost的参数一共分为三类: 通用参数:宏观函数控制. Booster参数:控制每一步的booster(tree/regression).booster参数一般可以调 ...

  8. Datasets and Evaluation Metrics used in Recommendation System

    Movielens and Netflix remain the most-used datasets. Other datasets such as Amazon, Yelp and CiteUli ...

  9. xgboost使用细节

    from http://blog.csdn.net/zc02051126/article/details/46771793 在Python中使用XGBoost 下面将介绍XGBoost的Python模 ...

随机推荐

  1. 微信小程序起步

    微信小程序 文档 微信小程序开发文档 本质 so微信小程序到底是什么?是原生的app还是H5应用? 简单来说,小程序是一种应用,运行的环境是微信(App)进程中,使用了部分的H5技术 目录介绍 app ...

  2. 【转帖】分布式事务之解决方案(XA和2PC)

    分布式事务之解决方案(XA和2PC) https://zhuanlan.zhihu.com/p/93459200 ​ 博彦信息技术有限公司 java工程师 3. 分布式事务解决方案之2PC(两阶段提交 ...

  3. API管理之YApi实现前后端高度分离

    全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/11972789.html,多谢,=.=~ 背景描述   前后端分离已成为互联网项目开发的业界标准使 ...

  4. 前端学习:HTML的学习总结

    html简介 1 html是什么:超文本标记语言 超文本:文字/图片/音频/视频 标签/标记:<body></body> 怎么做:使用标签来创建网页 2 HTML的用途:是用来 ...

  5. golang --os系统包详解

    环境变量 Environ 获取所有环境变量, 返回变量列表 func Environ() []string package main import ( "fmt" "os ...

  6. mybatis分页的一种解决方案

    mybatis自定义分页解决方案  1.PageSqlProvider<T> —— 提供默认的分页列表查询 package com.xinyartech.erp.core.base; im ...

  7. java报错 pom.xml第一行报"org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project...

    https://www.cnblogs.com/appium/p/11168441.html 新建Maven项目时,每个pom文件第一行都报错. 一.问题分析 原因就是你的maven的配置文件不是最新 ...

  8. python练习题:利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法

    方法一: # -*- coding: utf-8 -*- # 利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法: def trim(s): whil ...

  9. 基于NPOI对Excel进行简单的操作

    1. 关于NPOI NPOI是一个开源的用于在C#程序中读写Excel.WORD等微软OLE2组件文档的项目,使用NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作. 2 ...

  10. Redis之缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级

    目录 Redis之缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级 1.缓存雪崩 2.缓存穿透 3.缓存预热 4.缓存更新 5.缓存降级 Redis之缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级 ...