13

我有两个排名项目列表。每个项目都有一个排名和相关的分数。分数决定了排名。这两个列表可以包含(并且通常包含)不同的项目,即它们的交集可以是空的。我需要衡量这些排名的方法。是否有众所周知的算法(在文学或现实世界系统中)这样做?距离的度量应考虑项目的分数和等级。

4

3 回答 3

25

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

您的两个要求,即列表的非联合性排名的重要性没有通过常见的相关测试来满足。除此之外,他们中的大多数(例如 Kendall-Tau)不考虑顺序:

>>> 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。这是所谓的基于平均的重叠的概括,在这个博客中得到了很好的说明。同一个人还推出了 RBO 的实现

2018 年 1 月更新:

于 2016-03-24T10:16:21.230 回答
5

也许不能完全解决问题,但绝对值得一看Kendall 的加权 tau

当顺序很重要时,它提供了一种计算排名列表之间相似度的更好方法,因为它允许基于排名顺序进行任意加权。

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

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

于 2018-03-28T14:40:38.270 回答
1

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

于 2015-01-28T20:35:10.490 回答