NDCG、AUC介绍
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介绍的更多相关文章
- ROC和AUC介绍以及如何计算AUC ---好!!!!
from:https://www.douban.com/note/284051363/?type=like 原帖发表在我的博客:http://alexkong.net/2013/06/introduc ...
- 【转】ROC和AUC介绍以及如何计算AUC
转自:https://www.douban.com/note/284051363/ ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器( ...
- ROC和AUC介绍以及如何计算AUC
原文:http://alexkong.net/2013/06/introduction-to-auc-and-roc/ 为什么使用ROC曲线 既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因 ...
- 使用Python画ROC曲线以及AUC值
from:http://kubicode.me/2016/09/19/Machine%20Learning/AUC-Calculation-by-Python/ AUC介绍 AUC(Area Unde ...
- AUC,KS,ROC
要弄明白ks值和auc值的关系首先要弄懂roc曲线和ks曲线是怎么画出来的.其实从某个角度上来讲ROC曲线和KS曲线是一回事,只是横纵坐标的取法不同而已.拿逻辑回归举例,模型训练完成之后每个样本都会得 ...
- XGBoost:在Python中使用XGBoost
原文:http://blog.csdn.net/zc02051126/article/details/46771793 在Python中使用XGBoost 下面将介绍XGBoost的Python模块, ...
- XGBoost和LightGBM的参数以及调参
一.XGBoost参数解释 XGBoost的参数一共分为三类: 通用参数:宏观函数控制. Booster参数:控制每一步的booster(tree/regression).booster参数一般可以调 ...
- Datasets and Evaluation Metrics used in Recommendation System
Movielens and Netflix remain the most-used datasets. Other datasets such as Amazon, Yelp and CiteUli ...
- xgboost使用细节
from http://blog.csdn.net/zc02051126/article/details/46771793 在Python中使用XGBoost 下面将介绍XGBoost的Python模 ...
随机推荐
- Rider中Winform开发支持预览(5)
1.Rider .netCore3.0 winform设计器支持预览,这点vs目前还不支持. 2.不过winform下控件选择工具栏都是没有图标的
- FGPA异步信号问题
FPGA在处理异步信号时,尽量打1~2拍寄存器,否则在线调试会发现各种奇怪问题. 下面是verilog代码 在线调试发现,计数器在跳变 原因是cmd_start由ARM输出,与FPGA时钟异步,需要打 ...
- 图解微信小程序---实现行的删除和增加操作
图解微信小程序之实现行的删除和增加操作 代码笔记部分 第一步:在项目的app.json中创建一个新的页面(页面名称英文,可自定义) 第二步:在创建的新页面中编写页面(注意bindtap属性值,因为是我 ...
- 2019-11-29-win10-uwp-手把手教你使用-asp-dotnet-core-做-cs-程序
原文:2019-11-29-win10-uwp-手把手教你使用-asp-dotnet-core-做-cs-程序 title author date CreateTime categories win1 ...
- Python 绘图与可视化 matplotlib 动态条形图 bar
bar的参考链接:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.bar.html 第一种办法 一种方法是每次都重新画,包括清除f ...
- eclipse对Java项目进行单元测试
一.右键项目名->buildpath->configure buildpath->add library->junit->选择版本(以4为例)->apply-> ...
- 下载win10系统
有时候想重装系统但总找不到下载的地方,今天记录一下.nsdn我告诉你,这里有许多软件下载 网站URL:https://msdn.itellyou.cn/ 我想下载一个Windows10 磁力地址 ed ...
- Python从零开始——基础语法
- Linux shell awk逻辑控制语句
awk逻辑控制语句 1,if...else 格式: if(条件){语句:语句} else {语句1:语句2} 如果statement只有一条语句,{}可以不写 以冒号为分隔符,判断第一个字段,如果为r ...
- Centos 7 解决free -m 下buff/cache缓存很高
Linux服务器运行一段时间后,由于其内存管理机制,会将暂时不用的内存转为buff/cache,这样在程序使用到这一部分数据时,能够很快的取出,从而提高系统的运行效率,所以这也正是linux内存管理中 ...