首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较排名列表

如何比较排名列表
EN

Stack Overflow用户
提问于 2012-11-27 06:40:24
回答 3查看 16.2K关注 0票数 12

我有两个排名项目的列表。每个项目都有一个排名和一个相关的分数。分数决定了排名。这两个列表可以包含(并且通常是)不同的项,即它们的交集可以是空的。我需要测量来比较这样的排名。有没有众所周知的算法(在文献或现实系统中)来做到这一点?距离的测量应该考虑到分数以及项目的排名。

EN

回答 3

Stack Overflow用户

发布于 2016-03-24 18:16:21

这个问题以前从未被回答过,但我仍然认为这对很多人来说很重要:

通常的相关性测试不能满足您的两个要求,即列表的非连接性和秩的重要性。除了它们大多数(例如Kendall-Tau)之外,不要考虑顺序:

代码语言:javascript
复制
>>> from scipy.stats import kendalltau
>>> kendalltau([1,2,3,4,5], [2,1,3,4,5])
KendalltauResult(correlation=0.79999999999999982, value=0.050043527347496564)
>>> kendalltau([1,2,3,4,5], [1,2,3,5,4])
KendalltauResult(correlation=0.79999999999999982, value=0.050043527347496564)

第一次比较产生的值应该比第二次小得多,因为列表的头部比尾部(第二个要求)更重要。

除此之外,可以看到两个列表需要具有相同大小且具有相同类型的元素(第一个要求)

可能的解决方案

满足您所有需求的度量标准称为Rank Biased Overlap。它是所谓的基于平均的重叠的推广,这在这个blog中得到了很好的说明。同一个人还发布了一个RBO的implementation

更新2018年1月:

  • RBO
  • python 3.5.2

的另一个实现

票数 24
EN

Stack Overflow用户

发布于 2018-03-28 22:40:38

也许不能完全解决这个问题,但绝对值得一看Kendall's weighted tau

它提供了一种更好的方法来计算排序列表之间的相似度,因为它允许基于排序顺序的任意权重。

例如,人们可能更感兴趣的是在列表的前20个项目中提高相似度,而不是统一地。

scipy中也有一个很好的实现。

票数 5
EN

Stack Overflow用户

发布于 2015-01-29 04:35:10

有许多方法可以比较前k(排名)列表。一些非常琐碎的计算做了几个简化的假设,另一些不是那么琐碎,但在评估列表之间的排名相似性时更严格。我最近看到的一篇论文使用了信息论和数据压缩的概念,以一种统计上有意义的方式处理了这个问题:http://arxiv.org/abs/1310.0110

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13574406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档