Skip to main content

计算两个列表之间的 Rank-biased Overlap 的简单库

项目描述

秩偏重叠 (RBO)

圈子CI

该项目包含来自 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 个完全不同的项目进行排名,那么如果我们要求 和 之间的相似性AC我们也应该期望值 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。如果有任何问题,请告诉我。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

rbo-0.1.2.tar.gz (6.8 kB 查看哈希

已上传 source

内置分布

rbo-0.1.2-py3-none-any.whl (7.5 kB 查看哈希

已上传 py3