什么是动态时间规整(DTW)

动态时间规整Dynamic Time Warping,DTW)概述

动态时间规整是一种用于衡量两条时间序列相似度的算法。它能够在序列长度不一致、速度(时间轴)出现伸缩的情况下,找到两条序列的最优对齐路径,并以该路径上的累计距离作为相似度度量。


1. 基本原理

  1. 对齐路径(Warping Path)
  2. 动态规划求解
  3. 时间复杂度

2. 常见约束与变体

约束/变体 目的 关键点
全局窗口(Warping Window) 限制对齐路径不偏离对角线太远,防止过度扭曲 常用 Sakoe‑Chiba 窗口或 Itakura 梯形窗口
子序列匹配(Subsequence DTW) 只对齐较长序列中的一段与另一序列整体 适用于模式检测、异常检测
FastDTW 采用多层分辨率近似,降低计算量至
SoftDTW 用软最小化替代硬最小化,使距离可微,便于梯度下降优化 适用于深度学习中的损失函数

3. 典型应用场景

  1. 语音识别:对不同说话速度的同一词语进行对齐,是 DTW 最早的成功案例。
  2. 手写/笔迹识别:对笔画序列进行时间轴扭曲匹配。
  3. 动作/姿态识别:对加速度计或关节角度序列进行相似度度量。
  4. 时间序列分类:在金融、气象、医学等领域,用 DTW 作为距离度量进行 K‑NN 分类或聚类
  5. 生物信息学:DNA、蛋白质序列的非线性对齐。
  6. 音乐信息检索:对音频特征(如 MFCC)进行对齐,评估演奏相似度。

4. 实现要点(Python 示例)

import numpy as np

def dtw_distance(x, y, dist=lambda a,b: (a-b)**2):
    n, m = len(x), len(y)
    D = np.full((n+1, m+1), np.inf)
    D[0,0] = 0
    for i in range(1, n+1):
        for j in range(1, m+1):
            cost = dist(x[i-1], y[j-1])
            D[i,j] = cost + min(D[i-1,j], D[i,j-1], D[i-1,j-1])
    return np.sqrt(D[n,m])

该实现直接对应动态规划公式,适用于教学或小规模实验。若处理大规模序列,建议使用 fastdtw 包或 SoftDTW 实现。


5. 小结

  • DTW 通过在时间轴上“拉伸/压缩”,在保持序列顺序的前提下寻找最小累计距离,实现对长度不等、速度不同的序列的精准对齐。
  • 核心是 动态规划,但已有多种加速/约束技术可根据实际需求选用。
  • 其应用跨越语音、手写、动作、金融、医学等多个领域,是时间序列相似度度量的经典工具。
来源:www.aiug.cn
声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!