算法——如何衡量两个数字序列之间的相似度

背景

给定两个等长的数字序列,如何衡量他们之间的相似程度?
[ 2 , 1 , 0 , 3 ] [2, 1, 0, 3] [2,1,0,3] [ 2 , 0 , 3 , 1 ] [2, 0, 3, 1] [2,0,3,1] [ 1 , 3 , 2 , 0 ] [1, 3, 2, 0] [1,3,2,0]三个序列之间哪两个最相似?
为了解决上述问题,本文提出了两类衡量指标用来衡量序列相似度。

指标

0.符号约定

n n n:序列长度
P P P:数字序列 [ 0 , 1 , 2 , 3 , . . . , n − 1 ] [0,1,2,3,...,n-1] [0,1,2,3,...,n1]
A , B A,B A,B:数字序列 P P P的某种排列方式
R ( A ) R(A) R(A) A A A的反转序列
A [ i ] A[i] A[i] A A A中第 i i i位的数字
i [ A ] i[A] i[A]:数字 i i i A A A中的位置
s = A ( i , j ) s=A(i,j) s=A(i,j):交换, A A A中的第 i i i位与第 j j j位互换
w ( s ) w(s) w(s):交换权,进行交换 s s s需要的代价
S = A → B = [ s 1 , s 2 , s 3 , . . . ] S=A\to B=[s_1,s_2,s_3,...] S=AB=[s1,s2,s3,...]:转换,能将 A A A转换为 B B B的一系列交换
W ( S ) = ∑ s ∈ S w ( s ) W(S)=\sum_{s\in S} w(s) W(S)=sSw(s):转换权,转换 S S S中所有交换的交换权之和

1.基于位置的指标
  • 位方差(location square deviation, LSD)
    L S D ( A , B ) = 1 n ∑ i = 0 n − 1 ( i [ A ] − i [ B ] ) 2 LSD(A,B)=\frac{1}{n}\sum^{n-1}_{i=0}(i[A]-i[B])^2 LSD(A,B)=n1i=0n1(i[A]i[B])2
    各数在两序列中的位置差距的平方的平均值,值越小序列越相似。

  • 位均差(location mean deviation, LMD)
    L M D ( A , B ) = 1 n ∑ i = 0 n − 1 ∣ i [ A ] − i [ B ] ∣ LMD(A,B)=\frac{1}{n}\sum^{n-1}_{i=0}|i[A]-i[B]| LMD(A,B)=n1i=0n1i[A]i[B]
    各数在两序列中位置间差距绝对值的平均值,值越小序列越相似。

  • 交换差(swap deviation, SD)
    S D ( A , B ) = m i n ( W ( A → B ) ) = m i n ( ∑ s ∈ A → B 1 ) SD(A,B)=min(W(A\to B))=min(\sum_{s\in A\to B}1) SD(A,B)=min(W(AB))=min(sAB1)
    两序列转换所需最小交换次数,即令 w ( s ) = 1 w(s)=1 w(s)=1的最小转换权,值越小序列越相似。

  • 交换距离差(swap distance deviation, SDD)
    S D D ( A , B ) = m i n ( W ( A → B ) ) = m i n ( ∑ s ∈ A → B ∣ i − j ∣ ) SDD(A,B)=min(W(A\to B))=min(\sum_{s\in A\to B}|i-j|) SDD(A,B)=min(W(AB))=min(sABij)
    两序列转换所需最小交换距离(交换位置间距离)之和,即令 w ( s ) = ∣ i − j ∣ w(s)=|i-j| w(s)=ij的最小转换权,值越小序列越相似。

2.基于数值的指标
  • 值方差(value square deviation, VSD)
    V S D ( A , B ) = 1 n ∑ i = 0 n − 1 ( A [ i ] − B [ i ] ) 2 VSD(A,B)=\frac{1}{n}\sum^{n-1}_{i=0}(A[i]-B[i])^2 VSD(A,B)=n1i=0n1(A[i]B[i])2
    两序列对应位置两数之差平方的平均值,值越小序列越相似。

  • 值均差(value mean deviation, VMD)
    V M D ( A , B ) = 1 n ∑ i = 0 n − 1 ∣ A [ i ] − B [ i ] ∣ VMD(A,B)=\frac{1}{n}\sum^{n-1}_{i=0}|A[i]-B[i]| VMD(A,B)=n1i=0n1A[i]B[i]
    两序列对应位置两数之差绝对值的平均值,值越小序列越相似。

  • 点积比(dot product ratio, DPR)
    D P R ( A , B ) = ∑ i = 0 n − 1 A [ i ] × B [ i ] ∑ i = 0 n − 1 A [ i ] 2 DPR(A,B)=\frac{\sum^{n-1}_{i=0}A[i]×B[i]}{\sum^{n-1}_{i=0}A[i]^2} DPR(A,B)=i=0n1A[i]2i=0n1A[i]×B[i]
    两序列对应位置两数乘积的和除以序列各数平方和,值越大序列越相似,其取值范围为 [ n − 2 2 n − 1 , 1 ] [\frac{n-2}{2n-1},1] [2n1n2,1]

  • 归一化点积比(normalization dot product ratio, NDPR)
    N D P R ( A , B ) = 2 n − 1 n + 1 D P R ( A , B ) − n − 2 n + 1 NDPR(A,B)=\frac{2n-1}{n+1}DPR(A,B)-\frac{n-2}{n+1} NDPR(A,B)=n+12n1DPR(A,B)n+1n2
    将点积比归一化,取值范围为 [ 0 , 1 ] [0,1] [0,1]

性质

S D D ( A , B ) = n 2 L M D ( A , B ) SDD(A, B)=\frac{n}{2}LMD(A, B) SDD(A,B)=2nLMD(A,B)
L S D ( A , P ) = n ( n 2 − 1 ) 3 N D P R ( R ( A ) , P ) LSD(A,P)=\frac{n(n^2-1)}{3}NDPR(R(A),P) LSD(A,P)=3n(n21)NDPR(R(A),P)
L S D ( R ( A ) , P ) = n ( n 2 − 1 ) 3 N D P R ( A , P ) LSD(R(A),P)=\frac{n(n^2-1)}{3}NDPR(A,P) LSD(R(A),P)=3n(n21)NDPR(A,P)
L S D ( A , P ) = n ( n 2 − 1 ) 3 N D P R ( A , R ( P ) ) LSD(A,P)=\frac{n(n^2-1)}{3}NDPR(A,R(P)) LSD(A,P)=3n(n21)NDPR(A,R(P))
L S D ( A , R ( P ) ) = n ( n 2 − 1 ) 3 N D P R ( A , P ) LSD(A,R(P))=\frac{n(n^2-1)}{3}NDPR(A,P) LSD(A,R(P))=3n(n21)NDPR(A,P)

图像

根据如何将数字序列映射为整数计算序列相似度的算法,将整数转换为序列之后就可以以整数为自变量算出以上指标并画出三维图像。以下给出各个指标在 n = 6 n=6 n=6的情况下的图像。

  • 位方差(location square deviation, LSD)
    LSD
  • 位均差(location mean deviation, LMD)
    LMD
  • 交换差(swap deviation, SD)
    SD
  • 交换距离差(swap distance deviation, SDD)
    SDD
  • 值方差(value square deviation, VSD)
    VSD
  • 值均差(value mean deviation, VMD)
    VMD
  • 点积比(dot product ratio, DPR)
    DPR
  • 归一化点积比(normalization dot product ratio, NDPR)
    NDPR
  • 17
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值