如何计算两个排名列表之间的距离



假设我有一些排名列表:

A = ['cat', 'dog', 'bat']
B = ['dog', 'cat', 'cow']

我如何计算列表a和B之间的相似性得分,该得分考虑了列表之间重叠的项目数量及其相对排序。这是nDCG的用途吗?

您可以使用Kendall的Tau。您需要生成一个";等级;向量(向量中的每个值都是相应项目的秩(。

首先,从这些";排名";矢量:

A = ['cat', 'dog', 'bat', 'mouse']
B = ['dog', 'cat', 'cow']

您创建域(所有项目(:

domain = list(set(A + B))

列表中每个项目的索引是重要的,因为它将有助于生成";等级;矢量:

['cat', 'dog', 'bat', 'mouse', 'cow']

然后你生成A和B的等级(与域大小相同(,缺失的项目作为联系(最后一个等级(

A_rank = [1, 2, 3, 4, 5]
B_rank = [2, 1, 4, 4, 3]

你可以为此编写一个函数。

最后,你使用肯德尔的Tau获得-1到1:之间的分数

from scipy import stats
correlation = stats.kendalltau(A_rank, B_rank)

这是一个不寻常的请求。通常,基于共享元素的数量来比较列表,而不管它们的位置如何,或者基于元素在列表中的绝对顺序。相对定位(在"foo"之后的"bar",不管它们在列表中的绝对位置如何(是非常罕见和困难的情况。

有时这是在NLP字段中完成的,这可能对您有用,因为您的示例包含字符串列表。

  1. 识别语料库中的短语(要比较的所有列表(。这可以使用gensim.phrases模型(https://radimrehurek.com/gensim/models/phrases.html(
  2. 将字符串列表转换为BOW矢量(例如:https://maelfabien.github.io/machinelearning/NLP_2/#2-在sk学习中鞠躬(
  3. 使用余弦相似度计算向量之间的相似度

结束度量将考虑列表之间的总体相似性和列表中元素的相对顺序。

这可能取决于具体的用例。如果你正在处理文本数据,并且你试图识别一个单词在另一个单词(即短语(之后使用的实例,然后根据所用词汇的总体相似性和精确的短语来比较两个文档,

最新更新