计算两个列表之间的 Rank-biased Overlap 的简单库
项目描述
秩偏重叠 (RBO)
该项目包含来自 Webber、William、Alistair Moffat 和 Justin Zobel 的 Rank-Biased Overlap (RBO) 的 Python 实现。“不确定排名的相似性度量。” ACM 信息系统交易 (TOIS) 28.4 (2010): 20。”(下载)。
介绍
RBO 比较两个排名列表,并返回一个介于 0 和 1 之间的数值以量化它们的相似性。RBO 值为 0 表示列表完全不同,RBO 值为 1 表示完全相同。术语“不同”和“相同”需要进一步澄清。
给定两个排名列表:
A = ["a", "b", "c", "d", "e"]
B = ["e", "d", "c", "b", "a"]
我们可以看到它们都对 5 个项目(“a”、“b”、“c”、“d”和“e”)进行排名,但顺序完全相反。A在这种情况下, and should (and will)之间的相似度B为 0。但这里我们对 5 个相同的项目进行排名,因此它们是联合的。如果有排名第三的列表
C = ["f", "g", "h", "i", "j"]
它对 5 个完全不同的项目进行排名,那么如果我们要求 和 之间的相似性A,C我们也应该期望值 0。在这种非联合情况下,我们也需要能够计算相似度。
RBO 度量也可以处理具有不同长度的排名列表,并进行适当的外推。A比如list和list之间的RBO
D = ["a", "b", "c", "d", "e", "f", "g"]
将是 1。
用法
使用 Pip 安装
使用 Pip 将 RBO 模块安装到当前解释器:
pip install rbo
计算 RBO
该RankingSimilarity课程包含不同风格的 RBO 的计算,并明确参考了论文中的相应方程式。下面展示了如何计算两个排序列表 S 和 T 的相似度:
In [1]: import rbo
In [2]: S = [1, 2, 3]; T = [1, 3, 2]
In [3]: rbo.RankingSimilarity(S, T).rbo()
Out[3]: 0.8333333333333334
接受的数据类型是 Python 列表和 Numpy 数组。使用如下所示的底层 Numpy 数组可以使用 Pandas 系列。这个限制是必要的,因为[]在 Pandas 系列上使用会查询索引,该索引可能不会连续地对项目进行编号,甚至可能是非数字的。
In [4]: import pandas as pd
In [5]: U = pd.Series([1, 3, 2, 4, 5, 6])
In [6]: rbo.RankingSimilarity(T, U.values).rbo()
Out[6]: 1.0
发展
有关开发的补充任务,例如执行单元测试或检查是否正确打包,请参阅 Makefile。如果有任何问题,请告诉我。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。