排名之间的距离

11 投票
2 回答
2378 浏览
提问于 2025-04-18 07:21

我有两个方法,它们对一组字符串的排序方式不同,而我们可以认为的“正确”排序就是一个标准答案。

换句话说:

 ranked_list_of_strings_1 = method_1(list_of_strings)
 ranked_list_of_strings_2 = method_2(list_of_strings)    
 correctly_ranked_list_of_strings # Some permutation of list_of_strings

我该如何判断哪个方法更好,因为 method_1method_2 就像黑箱一样,内部的具体情况我不知道。有没什么方法可以用来测量这个,像 SciPyscikit-learn 这样的库里有吗?

在我的具体情况下,我其实有一个数据框,每个方法都会输出一个分数。重要的不是这些方法的分数和真实分数之间的差异,而是这些方法能否正确地进行排序(分数越高,排名越高,适用于所有列)。

      strings        scores_method_1   scores_method_2   true_scores
5714  aeSeOg                    0.54               0.1           0.8
5741  NQXACs                    0.15               0.3           0.4
5768  zsFZQi                    0.57               0.7           0.2

2 个回答

2

现在,scikit-learn这个库似乎也实现了NDCG(和DCG)这个指标。

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.ndcg_score.html#sklearn.metrics.ndcg_score

9

你在寻找的是归一化折扣累积增益(NDGC)。这是一个常用的指标,用于搜索引擎排名,帮助测试结果的质量。

简单来说,就是你可以通过用户的点击反馈(在你的情况下,就是实际的排名)来测试你的排名(比如你提到的两种方法)。NDGC可以告诉你你的排名和真实情况相比,质量如何。

在Python中,有一个基于RankEval的模块,可以实现这个指标(如果你想尝试其他的指标,也可以)。这个代码库在这里,还有一个很不错的IPython笔记本,里面有示例

撰写回答