归一化贴现累积增益 - 多标签排名指标 |机器学习
贴现累积收益
贴现累积增益 (DCG) 是衡量排名质量的指标。它主要用于信息检索问题,例如通过根据搜索关键字的相关性对它显示的文章进行排名来衡量搜索引擎算法的有效性。
让我们考虑一个输出 5 个名为( D 1 、 D 2 、 D 3 、 D 4 、 D 5 )文档的搜索引擎按该顺序输出。我们需要定义相关度(0-3),其中:
- 0:不相关
- 1-2:有点相关
- 3:完全相关
假设这些文档具有相关性分数:
- D 1 : 3
- D 2 : 2
- D 3 : 0
- D 4 : 0
- D 5 : 1
累积增益是这些相关性分数的总和,可以计算为:
贴现累积收益可通过以下公式计算:
因此,上述示例的贴现累积收益为:
现在我们需要将这些文章按排名降序排列,并计算 DCG 以获得理想折现累积增益(IDCG)排名。
现在,我们使用以下公式计算归一化 DCG :
代码:用于标准化折扣累积增益的Python程序
Python3
# import required package
from sklearn.metrics import ndcg_score, dcg_score
import numpy as np
# Relevance scores in Ideal order
true_relevance = np.asarray([[3, 2, 1, 0, 0]])
# Relevance scores in output order
relevance_score = np.asarray([[3, 2, 0, 0, 1]])
# DCG score
dcg = dcg_score(true_relevance, relevance_score)
print("DCG score : ", dcg)
# IDCG score
idcg = dcg_score(true_relevance, true_relevance)
print("IDCG score : ", idcg)
# Normalized DCG score
ndcg = dcg / idcg
print("nDCG score : ", ndcg)
# or we can use the scikit-learn ndcg_score package
print("nDCG score (from function) : ", ndcg_score(
true_relevance, relevance_score))
输出:
DCG score : 4.670624189796882
IDCG score : 4.761859507142915
nDCG score : 0.980840401274087
nDCG score (from function) : 0.980840401274087
归一化贴现累积增益 (NDCG) 的限制:
- NDCG 指标不会惩罚不良文档输出。例如: [3]和[3, 0, 0]具有相同的 NDCG,但在第二个中有两个不相关的文档。
- 因为没有具体的标准定义输出文件的数量。 DCG 似乎没有处理输出中缺少任何相关文档的问题。例如,相似输入的两个输出[3, 3, 3]和[3, 3, 3, 3]被认为同样好。对于输出 1,计算 DCG 3 ,但对于输出 2,计算 DCG 4 。
参考:
- DCG 维基百科文章
- Jarvelin, K. 和 Kekalainen, J. (2002)。 IR 技术的基于累积增益的评估。 ACM 信息系统交易 (TOIS),20(4),422-446。