在 DTW 中找到通过矩阵的最佳路径

机器算法验证 时间序列 分类 距离 模式识别
2022-04-11 17:04:03

我有两个时间序列qc我想计算这两个时间序列之间的动态时间环绕 (DTW) 距离:

q<-c(1,3,4,5,6,7)
c<-c(2,3,1,5,3,4)

据我了解,我们应该制作这样的矩阵:

4 | 9  1  0  1  4  9
3 | 16 0  1  4  9  16
5 | 16 4  1  0  1  4
1 | 0  4  9  16 25 36
3 | 4  0  1  4  9  16
   ------------------
    1  3  4  5  6  7

我已经阅读了很多参考资料,但我无法理解在这个矩阵中找到最佳路径是如何工作的。您能否向我解释如何通过该矩阵找到最佳路径,然后如何计算 DTW?

1个回答

您已经展示了一个矩阵,显示了使用平方欧几里得距离计算的逐点距离。该矩阵的每个元素将被称为cost[i,j]

您的目标是累积距离矩阵。该矩阵的每个元素将被称为DTW[i,j].

要使用此公式计算距离:

DTW[i, j] := cost[i,j] + minimum(DTW[i-1, j], DTW[i, j-1], DTW[i-1, j-1])

还要定义两个要求:

  • DTW[i, 0] = 无限
  • DTW[0, j] = 无限

然后您可以计算第一列和第一行,例如:

4   33                  
3   24                  
5   20                  
1   4                   
3   4   4   5   9   18  34
    1   3   4   5   6   7

然后,一步一步地,从左到右遍历列并达到目标:累积成本矩阵。

4   33  9   8   9   13  22
3   24  8   9   13  18  26
5   20  8   9   9   10  14
1   4   8   13  21  34  54
3   4   4   5   9   18  34
    1   3   4   5   6   7

DTW 距离定义为元素 DTW[n,m],因此是累积距离矩阵的右上方元素,它是沿最佳可能扭曲路径的成本之和。现在,您可以通过从右上角开始迭代地选择最小邻居来使用回溯来识别可能的最佳变形路径。

4           8   9   13  22
3       8               
5       8               
1   4                   
3   4                   
    1   3   4   5   6   7

最后值得一提的是,在大多数应用中,翘曲路径是可以防止病理翘曲的进一步约束。