如何在R中计算nDCG的理想DCG(IDCG)并遍历所有行
计算理想DCG(IDCG)的R实现
步骤说明与代码
首先提前定义好5个排名位置的固定权重,避免重复计算:
# 生成对应排名的权重:1/log2(1+1)、1/log2(2+1)……1/log2(5+1) weights <- 1 / log2(1:5 + 1)
接下来用apply函数逐行处理数据,完成得分降序排序与IDCG计算:
# 选中rank1到rank5列,逐行计算IDCG data1$IDCG <- apply(data1[, paste0("rank", 1:5)], 1, function(row_scores) { # 对当前行的相关性得分按降序排序(模拟理想最优排名) sorted_scores <- sort(row_scores, decreasing = TRUE) # 计算排序后得分的加权和,即IDCG sum(sorted_scores * weights) })
代码解释
paste0("rank", 1:5):自动生成rank1到rank5的列名,快速选中目标列,无需手动逐个输入apply(..., 1, ...):参数1代表按行处理,把每行的5个得分传入后续函数sort(row_scores, decreasing = TRUE):将当前行得分从高到低排序,得到理想状态下的最优排名序列sum(sorted_scores * weights):和你计算DCG的逻辑完全一致,只是用排序后的得分计算加权和
处理完成后,data1会新增一列IDCG,每行对应该行的理想DCG值,之后直接用DCG / IDCG就能算出nDCG。
内容的提问来源于stack exchange,提问作者Nampa Gwakondo
相关产品推荐
相关产品推荐

