考虑顺序的列表距离度量选择及Spearman相关性适用性咨询
序列顺序相似性的度量方法
先明确你的序列样本:
list1 = ["1", "2", "3", "4", "5"] list2 = ["1", "2", "3", "5", "4"] list3 = ["1", "5", "4", "3", "2"] list4 = ["4", "2", "5", "3", "1"]
以下是几种适合判断这类序列顺序相似性的方法:
1. 逆序数(或Kendall Tau相关系数)
逆序数统计的是目标序列与基准序列(比如list1)中,元素顺序相反的元素对数量。逆序数越少,说明两个序列的顺序越相似:
- list1与list2仅存在
(4,5)这一对逆序,逆序数为1; - list1与list3的逆序数为6,远大于前者,完全符合你“list1与list2最相似”的预期。
Kendall Tau相关系数是逆序数的标准化指标,取值范围在[-1,1],越接近1表示序列顺序的一致性越高。
2. 相邻交换编辑距离
这种方法计算将一个序列转换成另一个序列所需的相邻元素交换次数,交换次数越少,序列顺序相似度越高:
- list1转成list2只需要交换最后两个元素,仅1次;
- 转成list3则需要多次交换,次数差异能直观体现相似程度的区别。
3. Spearman秩相关系数(适用场景说明)
Spearman相关系数完全适用于这个场景,具体操作步骤如下:
- 给每个字符串ID分配“秩”:以list1为基准,元素的秩就是它在list1中的位置(比如"1"的秩是1,"2"是2,以此类推);
- 将其他列表的元素替换为对应的秩,得到秩序列:比如list2的秩序列是
[1,2,3,5,4],list3的是[1,5,4,3,2]; - 计算list1的秩序列
[1,2,3,4,5]与其他秩序列的Spearman相关系数:- list1与list2的系数为0.95,接近1;
- list1与list3的系数为0.1,list1与list4的系数为-0.5,数值差异明显,能准确区分顺序相似性。
Spearman系数衡量的是两个序列的单调性相关程度,正好匹配你对“顺序相似性”的需求。
内容的提问来源于stack exchange,提问作者Hummer
相关产品推荐
相关产品推荐

