NDCG及其实现
来源:互联网 发布:微信怎么发淘宝联盟 编辑:程序博客网 时间:2024/06/06 00:01
1、NDCG的目标:希望得到的排序列表,质量越高越好。并且,如果将更相关的排到更前面,那么计算得到的NDCG是会越高的。
AUC和NDCG的区别:
1、AUC的含义:把正样本排在负样本前的概率。AUC关注的是全局的排序,只要正样本排在负样本之前,就可以得分。并没有加权。
2、NDCG也是关注排序,但是NDCG关注的是,加权排序。比如我们希望top10的排序准确度,要比bottom10的排序准确度重要。对于这种加权排序,NDCG会更加合适。
因此,AUC和NDCG的区别是,加权与否。AUC的评估中,top-10的排序质量和bottom-10的排序质量是一样重要的。但是,在NDCG中,是需要加权的,top-10的排序质量和bottom-10的排序质量的权重是不一样的。
2、
说明:sklearn只有到0.20版本才支持NDCG误差的计算,因此我们可以将该代码拷贝出来。
import numpy as npfrom sklearn.preprocessing import LabelBinarizerfrom sklearn.metrics import make_scorerfrom sklearn.utils import check_X_yimport sysdef dcg_score(y_true, y_score, k=5): order = np.argsort(y_score)[::-1] y_true = np.take(y_true, order[:k]) gain = 2 ** y_true - 1 #print(gain) discounts = np.log2(np.arange(len(y_true)) + 2) #print(discounts) return np.sum(gain / discounts)def ndcg_score(y_true, y_score, k=5): y_score, y_true = check_X_y(y_score, y_true) # Make sure we use all the labels (max between the length and the higher # number in the array) lb = LabelBinarizer() lb.fit(np.arange(max(np.max(y_true) + 1, len(y_true)))) binarized_y_true = lb.transform(y_true) print(binarized_y_true) if binarized_y_true.shape != y_score.shape: raise ValueError("y_true and y_score have different value ranges") scores = [] # Iterate over each y_value_true and compute the DCG score for y_value_true, y_value_score in zip(binarized_y_true, y_score): actual = dcg_score(y_value_true, y_value_score, k) best = dcg_score(y_value_true, y_value_true, k) #print(best) scores.append(actual / best) return np.mean(scores)# NDCG Scorer function# sklearn的NDCG对二维的计算有点问题,可以转化为三分类问题y_true = [0, 1, 0]y_score = [[0.0, 1.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]print(ndcg_score(y_true, y_score, k=2))说明:sklearn对二分类的NDCG貌似不是支持得很好,所以折中一下,换成三分类,第三类补成概率为0.
阅读全文
0 0
- NDCG及其实现
- NDCG
- NDCG
- ndcg算法的python实现
- 理解NDCG
- 信息检索评价指标NDCG、a-NDCG
- NDCG、AUC介绍
- NDCG评价指标讲解
- 评价标准NDCG
- NDCG 评价标准
- 排序指标NDCG
- IR的评价指标:NDCG
- NDCG和MAP的含义
- nDCG, 排序模型评价指标
- Controller 接口及其实现
- Cell体系结构及其实现
- 线程池及其实现
- RC4加密算法及其实现
- 8.12 无限序列 1861
- 阿牛的EOF牛肉串
- 02 权限(用户组以及文件的权限)(特殊权限位)
- 移动端h5轮播插件swipe
- C++ string append()添加文本
- NDCG及其实现
- 新鲜出炉-网易内推编程题目之操作序列
- UVA-1627
- markdown语法
- ACM常用技巧之尺取法--POJ3061/3320/2739/2100
- Python:打开文件读取每一行(使用with as)
- js/css特效
- equals()和hashCode()区别?
- 整合struts和spring框架