归一化折扣累积增益(NDCG)计算方法

归一化折扣累积增益(Normalized Discounted Cumulative Gain,简称NDCG)是一种衡量信息检索系统性能的指标。它通过计算在预测得分排序下的真实标签得分,再应用对数折扣,然后将结果除以最佳可能得分(理想DCG,即完美排序下得到的DCG),从而得到一个介于0和1之间的得分。如果真实标签的得分在预测得分排序中排名较高,该排名指标将返回较高的值。

NDCG计算参数

在计算NDCG时,需要考虑以下几个参数:

y_true: 真实目标数组,形状为(n_samples, n_labels),表示多标签分类的真实目标,或者待排序实体的真实得分。如果y_true中包含负值,可能会导致输出值不在0和1之间。 y_score: 目标得分数组,形状为(n_samples, n_labels),可以是概率估计、置信度值,或者是某些分类器的“决策函数”返回的未阈值化的决策度量。 k: 整数,默认为None。只考虑排名最高的k个得分。如果为None,则使用所有输出。 sample_weight: 样本权重数组,默认为None。如果为None,则所有样本权重相同。 ignore_ties: 布尔值,默认为False。假设y_score中没有平局(如果y_score是连续的,则很可能是这种情况)以提高效率。

NDCG返回值

归一化折扣累积增益计算将返回一个浮点数,表示所有样本的平均NDCG得分,范围在[0.0, 1.0]之间。

NDCG的应用

NDCG在信息检索机器学习领域有着广泛的应用。它可以用来评估搜索引擎、推荐系统等的性能。通过比较不同模型或算法的NDCG得分,可以确定哪个模型或算法在特定任务上表现更好。

import numpy as np from sklearn.metrics import ndcg_score # 假设有一些答案的真实相关性 true_relevance = np.asarray([[10, 0, 0, 1, 5]]) # 预测了一些答案的得分(相关性) scores = np.asarray([[.1, .2, .3, 4, 70]]) print(ndcg_score(true_relevance, scores)) # 输出: 0.69... # 可以设置k来截断求和;只有前k个答案有贡献 print(ndcg_score(true_relevance, scores, k=4)) # 输出: 0.35... # 如果预测中有平局 scores = np.asarray([[1, 0, 0, 0, 1]]) print(ndcg_score(true_relevance, scores, k=1)) # 输出: 0.75...
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485