nDCGk就是折损累计增益DCGk除以最大累计增益iDCGk。 最大累计增益iDCG的计算方法是:模型返回了k个推荐的项目,我们将这k个项目标注上它们在原始数据集上的分数,然后再根据分数进行重排序,然后再计算DCG,得到的就是iDCG。 那么nDCG整体的计算过程就是:模型根据用户和候选物品的相似度,对候选项目进行排序,返回k个最相...
此时z和x有了度量,但依旧存在问题,那便是y的NDCG小于x,这肯定不合理,因为y在首位带来了收益,还在其他两个位置有收益,不应当比z的小。 NDCG@K 很多时候我们更关心队列前的利用价值,此时DCG和IDCG都只取前K位,得到前K位的NDCG: NDCG_K 注意到如果K取3,IDCG的计算需要按3来,那么对于z只带来一个收益,相当于...
这些方法依赖于人工判断的相关性,主要关注系统在检索特定相关结果时的表现。常见的离线评估指标包括召回率@K(recall@K)、平均倒数排名(Mean Reciprocal Rank, MRR)、平均精度@K(Mean Average Precision, MAP@K)和归一化折扣累积增益(Normalized Discounted Cumulative Gain, NDCG)。这些指标能够提供对系统在处理特定查询...
NDCG的计算公式如下:公式:其中,r(i)表示项目i与用户的相关性分数,通常取值为0或1。公式中,log(1 + r(i))用于归一化,以反映相关性的对数增益。当相关性分数r(i)只有(0,1)两种取值时,DCG@K的表达更直观。算法返回的排序列表中的项目若出现在真实交互列表中,则分子加1;反之,则不计入...
i =1的推荐项在推荐列表 K K K头部, r i = 0 r_i=0 r i =0的推荐项在推荐列表 K K K的末尾。 nDCG: NDCG是归一化后的DCG 2. 代码 import numpy as npdef DCG(A, test_set):# --- 计算 DCG --- #dcg = 0for i in range(len(A)):# 给r_i赋值,若r_i在测试集中则为1,否则为...
DCG5=25−1log22+23−1log23+22−1log24+21−1log25+22−1log26=31+4.4+1.5+0.4+1.2=38.5DCG没有考虑到推荐列表和每个检索中真正有效结果个数,所以最后我们引入NDCG(normalized discounted CG),顾名思义就是标准化之后的DCG。 NDCGk=DCGkIDCGk ...
在用户与用户之间,DCGs没有直接的可比性,所以我们要对它们进行归一化处理。最糟糕的情况是,当使用非负相关评分时DCG为0。为了得到最好的,我们把测试集中所有的条目置放在理想的次序下,采取的是前K项并计算它们的DCG。然后将原DCG除以理想状态下的DCG并得到NDCG@K,它是一个0到1之间的数。
基于打分的个性推荐系统可以用CG(cumulative gain), 累计増益。假设我们推荐k kk个物品,这个推荐列表的C G k C G_{k}CGk计算 公式如下: C G k = ∑ i = 1 k r e l i . C G_{k}=\sum_{i=1}^{k} \mathrm{rel}_{i} .CGk=i=1∑kreli. ...
(relevant_score, i)21returndcgscore_list;2223defidcg_k(ideal,k):24#idcg是一个系统最理想情况下的返回结果排序,也就是一个案例中所给的最佳排序25idcgscore_list = [0.0foriinrange(11)]#计算1,2,...,k的idcg值26foriinrange(k):27idcgscore_list[i+1] = idcgscore_list[i] +dcg(ideal[i...
\[ NDCGk = \frac{DCGk}{IDCGk} \] 其中,rel_i 表示第 i 个位置的相关性强度,k 表示计算的位置数。 五、NDCG的优缺点 1. 优点 (1)考虑了排名位置:NDCG不仅考虑了相关性强度,还考虑了排名的先后顺序,更全面地反映了系统的排名质量。 (2)能够区分相关性强度:NDCG可以区分不同相关性文档的重要性,对用...