动态时间规整(Dynamic Time Warping,DTW)补充案例

DTW的边界条件是确保累积距离矩阵计算“有起点、有规则”的基础,它规定了矩阵中第一行第一列的累积距离如何计算(因为这两行/列是路径的“起点边缘”,没有“上一步”的全部选择)。下面结合具体场景和例子展开说明:

为什么需要边界条件?

累积距离矩阵 ( D[i][j] ) 的核心递归公式是:
[ D[i][j] = \text{dist}[i][j] + \min\left( D[i-1][j],\ D[i][j-1],\ D[i-1][j-1] \right) ]
这个公式的前提是:( i>0 ) 且 ( j>0 )(即非第一行、非第一列),此时“上一步”可以从左、上、左上三个方向选择。

但对于第一行(( i=0 ),( j>0 ))和第一列(( j=0 ),( i>0 )),情况不同:

  • 第一行的元素(如 ( D[0][1] )、( D[0][2] )):对应的是序列X的第一个元素(( x_0 ))与序列Y的第j个元素(( y_j ))对齐。由于 ( i=0 ) 是X的起点,无法再“向上”移动(没有 ( i-1 = -1 ) 这个位置),所以上一步只能从左边来(即 ( D[0][j-1] ))。
  • 第一列的元素(如 ( D[1][0] )、( D[2][0] )):对应的是序列X的第i个元素(( x_i ))与序列Y的第一个元素(( y_0 ))对齐。由于 ( j=0 ) 是Y的起点,无法再“向左”移动(没有 ( j-1 = -1 ) 这个位置),所以上一步只能从上面来(即 ( D[i-1][0] ))。

边界条件就是专门为这两种情况制定的计算规则。

具体的边界条件规则

假设序列X长度为n(索引0到n-1),序列Y长度为m(索引0到m-1),距离矩阵为 ( \text{dist}[i][j] = |x_i - y_j| )。

1. 起点:( D[0][0] )

累积距离矩阵的起点是 ( D[0][0] ),它表示X的第一个元素(( x_0 ))与Y的第一个元素(( y_0 ))对齐时的累积距离。由于这是路径的“第一步”,没有上一步,因此:
[ D[0][0] = \text{dist}[0][0] ]

2. 第一行(( i=0 ),( j>0 ))

第一行的元素对应“X的第一个元素 ( x_0 ) 与Y的第j个元素 ( y_j ) 对齐”。由于X的索引固定为0(不能再向上移动,即 ( i-1 = -1 ) 不存在),路径只能从左边(( j-1 ))过来。因此,累积距离等于“当前点的距离 + 左边点的累积距离”:
[ D[0][j] = \text{dist}[0][j] + D[0][j-1] ]

举例
若X = [1,3,5](( x_0=1 ),( x_1=3 ),( x_2=5 )),Y = [2,4,6](( y_0=2 ),( y_1=4 ),( y_2=6 )):

  • 计算 ( D[0][0] ):( \text{dist}[0][0] = |1-2| = 1 ) → ( D[0][0] = 1 )。
  • 计算 ( D[0][1] )(( i=0, j=1 )):( \text{dist}[0][1] = |1-4| = 3 ),左边 ( D[0][0] = 1 ) → ( D[0][1] = 3 + 1 = 4 )。
  • 计算 ( D[0][2] )(( i=0, j=2 )):( \text{dist}[0][2] = |1-6| = 5 ),左边 ( D[0][1] = 4 ) → ( D[0][2] = 5 + 4 = 9 )。
3. 第一列(( j=0 ),( i>0 ))

第一列的元素对应“X的第i个元素 ( x_i ) 与Y的第一个元素 ( y_0 ) 对齐”。由于Y的索引固定为0(不能再向左移动,即 ( j-1 = -1 ) 不存在),路径只能从上面(( i-1 ))过来。因此,累积距离等于“当前点的距离 + 上面点的累积距离”:
[ D[i][0] = \text{dist}[i][0] + D[i-1][0] ]

接上面的例子

  • 计算 ( D[1][0] )(( i=1, j=0 )):( \text{dist}[1][0] = |3-2| = 1 ),上面 ( D[0][0] = 1 ) → ( D[1][0] = 1 + 1 = 2 )。
  • 计算 ( D[2][0] )(( i=2, j=0 )):( \text{dist}[2][0] = |5-2| = 3 ),上面 ( D[1][0] = 2 ) → ( D[2][0] = 3 + 2 = 5 )。

动态时间规整(Dynamic Time Warping,DTW)补充案例_第1张图片
如图所示,一共有三种情况,实际是对应了三种不同的序列对应关系。[i,j-1], [i-1,j]这种说明还要继续一对多。[i-1][j-1]这种说明要开始新的一对一关系。

边界条件的直观意义

第一行和第一列的计算规则本质是强制路径从起点(0,0)开始,沿着序列的边缘“逐步扩展”,避免了“无中生有”的距离计算。

  • 第一行:X的第一个元素“拉伸”对齐Y的前j个元素(允许一对多对齐),例如X的“1”可以同时对齐Y的“2”“4”“6”(虽然实际中这种对齐可能距离很大,但规则上是允许的)。
  • 第一列:Y的第一个元素“拉伸”对齐X的前i个元素(同样允许一对多对齐),例如Y的“2”可以同时对齐X的“1”“3”“5”。

总结

边界条件是DTW累积距离矩阵的“奠基规则”:

  • 起点 ( D[0][0] ) 是路径的初始值;
  • 第一行和第一列通过“只能从左/上移动”的约束,确保路径从起点开始“向右/向上”逐步扩展,为后续递归计算(非边缘元素)提供了基础。

理解了边界条件,就能更清晰地推导整个累积距离矩阵的计算过程,进而理解DTW如何通过动态规划找到最优对齐路径。

你可能感兴趣的:(python,人工智能,机器学习,算法,动态规划)