Closed TccccD closed 1 year ago
最近正在用你们的数据做一些实验,在计算nDCG的时候,发现sklearn的ndcg_score结果不太对,它的计算方式貌似会先做一个排序再计算ndcg。我按照你论文的公式,重新实现了一个,可以帮忙看看是不是正确的吗?感谢! @Deriq-Qian-Dong y_true为测试集中的rel,y_pred为我预测的p对应rel的排序列表,如果在测试集对应q存在这个p,则标上对应的rel,如果不存在则为0。
def get_dcg_my(y, k): y = y[:k] dcg = (2 ** np.array(y) - 1) / np.log2(np.arange(1, len(y) + 1) + 1) dcg = np.sum(dcg) return dcg def get_ndcg_my(y_true, y_pred, k=10): dcg = get_dcg_my(y_pred, k) idcg = get_dcg_my(y_true, k) print(dcg, idcg) ndcg = dcg / idcg return ndcg
你的实现看起来没有问题,但是建议用trec的脚本来计算对比一下,看看结果是否一样。
trec的脚本 你的实现看起来没有问题,但是建议用trec的脚本来计算对比一下,看看结果是否一样。
trec的脚本
trec的脚本是什么
trec_eval
最近正在用你们的数据做一些实验,在计算nDCG的时候,发现sklearn的ndcg_score结果不太对,它的计算方式貌似会先做一个排序再计算ndcg。我按照你论文的公式,重新实现了一个,可以帮忙看看是不是正确的吗?感谢! @Deriq-Qian-Dong y_true为测试集中的rel,y_pred为我预测的p对应rel的排序列表,如果在测试集对应q存在这个p,则标上对应的rel,如果不存在则为0。