接上文,
时间序列分析 23 DTW (时序相似度度量算法) 上
DTW解析
我们已经给出了算法的原理和实现代码。在这一部分,我们将从直观上深度解析一下DTW算法,就以前面所给出的图形中的蓝色A,绿色B序列为例。见下图,
DTW算法是建立在计算两个序列的距离混淆矩阵的基础上的。图(a)中时序A的值显示在X轴上,时序B的值显示在Y轴上。图(b)显示了最佳对齐方式,连接A,B序列的红线就对应了图(a)中的红点。
关键问题在于我们如何找到这个最佳对齐方式,请见下图
如何找到这个最佳对齐方式演变成了如何找到上图网格中红点所对应的路径。其中,
P
=
p
1
,
…
,
p
s
,
…
,
p
k
P=p_1,\dots,p_s,\dots,p_k
P=p1,…,ps,…,pk
p
s
=
(
i
s
,
j
s
)
p_s=(i_s,j_s)
ps=(is,js)
这里这个映射关系
P
P
P被称为变形函数(Warping Function)
我们定义两个序列的时间规范化距离为:
D
(
A
,
B
)
=
∑
s
=
1
k
d
(
p
s
)
⋅
w
s
∑
s
=
1
k
w
s
D(A,B)=\frac{\sum\limits_{s=1}^{k}d(p_s)\cdot w_s}{\sum\limits_{s=1}^{k}w_s}
D(A,B)=s=1∑kwss=1∑kd(ps)⋅ws
这里,
d
(
p
s
)
d(p_s)
d(ps)是
i
s
i_s
is与
j
s
j_s
js之间的距离,而
w
s
w_s
ws是权重系数。
最佳路径就是
arg min P D ( A , B ) . \mathop{\arg\min}_{P} D(A,B). argminPD(A,B).
前面提到,DTW需要满足边界条件和规则,保证不是部分匹配。
i
1
=
1
,
i
k
=
n
;
j
1
=
1
,
j
k
=
m
i_1=1,i_k=n;j_1=1,j_k=m
i1=1,ik=n;j1=1,jk=m
增加窗口条件限制下
∣
i
s
−
j
s
∣
≤
r
,
r
>
0
|i_s-j_s|\le r, r \gt 0
∣is−js∣≤r,r>0,
r
r
r就是窗口大小
令最佳路径表示为
g
(
)
g()
g()
- 计算 g ( 1 , 1 ) = d ( 1 , 1 ) g(1,1)=d(1,1) g(1,1)=d(1,1)
- 计算第一行 g ( i , 1 ) = g ( i − 1 , 1 ) + d ( i , 1 ) g(i,1)=g(i-1,1)+d(i,1) g(i,1)=g(i−1,1)+d(i,1)
- 计算第一列
g
(
1
,
j
)
=
g
(
1
,
j
−
1
)
+
d
(
1
,
j
)
g(1,j)=g(1,j-1)+d(1,j)
g(1,j)=g(1,j−1)+d(1,j)
移动到第二行
g ( i , 2 ) = m i n ( g ( i , 1 ) , g ( i − 1 , 1 ) , g ( i − 1 , 2 ) ) + d ( i , 2 ) g(i,2)=min(g(i,1),g(i-1,1),g(i-1,2))+d(i,2) g(i,2)=min(g(i,1),g(i−1,1),g(i−1,2))+d(i,2)
继续保持从左向右,从下向上计算完整个网格
g ( i , j ) = m i n ( g ( i − 1 , j ) + g ( i , j − 1 ) + g ( i − 1 , j − 1 ) ) + d ( i , j ) g(i,j)=min(g(i-1,j)+g(i,j-1)+g(i-1,j-1))+d(i,j) g(i,j)=min(g(i−1,j)+g(i,j−1)+g(i−1,j−1))+d(i,j)
回溯 g ( n , m ) 到 g ( 1 , 1 ) g(n,m)到g(1,1) g(n,m)到g(1,1)即为最佳路径
DTW算法的时间复杂度为 O ( m ∗ n ) O(m*n) O(m∗n), m , n m,n m,n 分别为两个序列的长度。