排名之间的距离
我有两个方法,它们对一组字符串的排序方式不同,而我们可以认为的“正确”排序就是一个标准答案。
换句话说:
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_1
和 method_2
就像黑箱一样,内部的具体情况我不知道。有没什么方法可以用来测量这个,像 SciPy
或 scikit-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)这个指标。
9
你在寻找的是归一化折扣累积增益(NDGC)。这是一个常用的指标,用于搜索引擎排名,帮助测试结果的质量。
简单来说,就是你可以通过用户的点击反馈(在你的情况下,就是实际的排名)来测试你的排名(比如你提到的两种方法)。NDGC可以告诉你你的排名和真实情况相比,质量如何。
在Python中,有一个基于RankEval的模块,可以实现这个指标(如果你想尝试其他的指标,也可以)。这个代码库在这里,还有一个很不错的IPython笔记本,里面有示例。