我有两种方法可以对字符串列表进行不同的排序,以及我们可以认为是列表的“正确”排名(即黄金标准)。
换句话说:
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
答案 0 :(得分:8)
您正在寻找标准化折扣累积增益(NDGC)。这是搜索引擎排名中常用的度量标准,用于测试结果排名的质量。
这个想法是你测试你的排名(在你的情况下是两种方法),通过点击(在你的演员阵容中的真实排名)反对用户反馈。 NDGC将告诉您排名相对于事实的质量。
Python基于RankEval的模块实现了这个指标(如果你想尝试它们,还有其他一些)。 repo is here并且有一个很好的IPython NB with examples
答案 1 :(得分:1)
scikit-learn库似乎也已实现了NDGC(和DGC)度量标准。