算法笔记-DTW动态时间规整

article/2025/9/12 11:14:16

  • 算法笔记-DTW动态时间规整
    • 简介
    • 简单的例子
    • 定义
    • 讨论
      • 约束条件
      • 步模式
      • 标准化
      • 点与点的距离函数
    • 具体应用场景
      • 分类
      • 点到点匹配

算法笔记-DTW动态时间规整

动态时间规整/规划(Dynamic Time Warping, DTW)是一个比较老的算法,大概在1970年左右被提出来,最早用于处理语音方面识别分类的问题。

1.简介

简单来说,给定两个离散的序列(实际上不一定要与时间有关),DTW能够衡量这两个序列的相似程度,或者说两个序列的距离。同时DTW能够对两个序列的延展或者压缩能够有一定的适应性,举个例子,不同人对同一个词语的发音会有细微的差别,特别在时长上,有些人的发音会比标准的发音或长或短,DTW对这种序列的延展和压缩不敏感,所以给定标准语音库,DTW能够很好得识别单个字词,这也是为什么DTW一直被认为是语音处理方面的专门算法。实际上,DTW虽然老,但简单且灵活地实现模板匹配,能解决很多离散时间序列匹配的问题,视频动作识别,生物信息比对等等诸多领域都有应用。

例如下图,有两个呈现正弦规律序列,其中蓝色序列是稍微被拉长了。即使这两个序列,不重合,但是我们也可以有把握说这两个序列的相似程度很高(或者说这两个序列的距离很小)。
Two Sine Waves

DTW能够计算这两个序列的相似程度,并且给出一个能最大程度降低两个序列距离的点到点的匹配。见下图,其中黑色与红色曲线中的虚线就是表示点点之间的一个对应关系。
Two Sine Waves DTW mapped

也就是说,两个比对序列之间的特征是相似的,只是在时间上有不对齐的可能,这个算法名中的Time Warping,指的就是对时间序列进行的压缩或者延展以达到一个更好的匹对。

2.简单的例子

比如说,给定一个样本序列X和比对序列Y,Z:

X:3,5,6,7,7,1

Y:3,6,6,7,8,1,1
Z:2,5,7,7,7,7,2

请问是X和Y更相似还是X和Z更相似?

DTW首先会根据序列点之间的距离(欧氏距离),获得一个序列距离矩阵 M ,其中行对应X序列,列对应Y序列,矩阵元素为对应行列中X序列和Y序列点到点的欧氏距离:

X和Y的距离矩阵:

X/Y3667811
30334522
52112344
63001255
74110166
74110166
12556700

然后根据距离矩阵生成1损失矩阵(Cost Matrix)或者叫累积距离矩阵 Mc,其计算方法如下:
1. 第一行第一列元素为 M 的第一行第一列元素,在这里就是0;
2. 其他位置的元素 (Mc(i,j))的值则需要逐步计算,具体值的计算方法为 Mc(i,j)=Min(Mc(i1,j1),Mc(i1,j),Mc(i,j1))+M(i,j) ,得到的 Mc 如下:

X/Y3667811
303610151719
5212471115
651124914
792212814
7133312814
115887822

最后,两个序列的距离,由损失矩阵最后一行最后一列给出,在这里也就是2。

同样的,计算X和Z的距离矩阵:

X/Z2577772
31244441
53022223
64111114
75200005
75200005
11466661

和损失矩阵:

X/Z2577772
313711151920
541357912
68223459
713422227
718622227
1191088883

所以,X和Y的距离为2,X和Z的距离为3,X和Y更相似。

3.定义

有一个具体例子作为帮助,我们再来定义DTW算法。

假设给定两个序列,样本序列 X=(x1,...,xN) 和测试序列 Y=(y1,...,yN) ,同时给定一个序列中点到点的距离函数 d(i,j)=f(xi,yj)0 (一般为欧氏距离,实际上也可以是别的函数)。

那么DTW的核心在于求解扭曲曲线(Warping Curve)或者说扭曲路径,也就是点点之间的对应关系。我们表示为 ϕ(k)=(ϕx(k),ϕy(k)) ,其中 ϕx(k) 的可能值为1,2…N, ϕy(k) 的可能值为1,2…M,k=1…T。也就是说,求出T个从X序列中点到Y序列中点的对应关系,例如若 ϕ(k)=(1,1) , 那么就是说X曲线的第一个点与Y曲线的第一个点是一个对应。

给定了 ϕ(k) ,我们可以求解两个序列的累积距离(Accumulated Distortion):

dϕ(X,Y)=k=1Td((ϕx(k),ϕy(k))

DTW的最后输出,就是要找到一个最合适的 ϕ(k) 扭曲曲线,使得累积距离最小,也就是损失矩阵的最后一行最后一列的值:

DTW(X,Y)=minϕdϕ(X,Y)

换句话说,就是给定了距离矩阵,如何找到一条从左上角到右下角的路径,使得路径经过的元素值之和最小。这个问题可以由动态规划(Dynamic Programming)解决(时间复杂度O(N+M)),也就是上面例子中,计算损失矩阵的过程,实际上不需要把整个矩阵都求解出来,大致将对角线上的元素求解出来即可。

4.讨论

实际上,虽然这个算法简单,但是有很多值得讨论的细节。

约束条件

首先,路径的寻找不是任意的,一般来说有三个约束条件:

  1. 单调性: ϕx(k+1)ϕx(k) ϕy(k+1)ϕy(k) ,也就是说扭曲曲线不能往左或者往上后退,否则会出现无意义的循环;
  2. 连续性: ϕx(k+1)ϕx(k)1 , 即扭曲曲线不能跳跃,必须是连续的,保证两个序列里的所有点都被匹配到,但这个条件可以一定程度上被放松;
  3. 边界条件确定性: ϕx(1)=ϕy(1)=1 ϕx(T)=N ϕy(T)=M ,即路径一定从左上开始,结束于右下,这个条件也可以被放松,以实现局部匹配。

除此之外,我们还可以增加别的约束:

  1. 全局路径窗口(Warping Window): |ϕx(s)ϕy(s)|r ,比较好的匹配路径往往在对角线附近,所以我们可以只考虑在对角线附近的一个区域寻找合适路径(r就是这个区域的宽度);
  2. 斜率约束(Slope Constrain): ϕx(m)ϕx(n)ϕy(m)ϕy(n)p ϕy(m)ϕy(n)ϕx(m)ϕx(n)q , 这个可以看做是局部的Warping Window,用于避免路径太过平缓或陡峭,导致短的序列匹配到太长的序列或者太长的序列匹配到太短的序列。

步模式

实际上,这些步模式(Step Pattern)一定程度上涵盖了不同的约束,步模式指的是生成损失矩阵时的具体算法,例如在例子中使用的是 Mc(i,j)=Min(Mc(i1,j1),Mc(i1,j),Mc(i,j1))+M(i,j) 准对称步模式。实际上还有很多其他步模式,不同的步模式会影响最终匹配的结果。关于不同的步模式,可以参见[2]第四章。常用的有对称,准对称和非对称三种。

标准化

序列的累积距离,可以被标准化,因为长的测试序列累积距离很容易比短的测试序列累积距离更大,但这不一定说明后者比前者与样本序列更相似,可以通过标准化累积距离再进行比较。不同的步模式会需要的不同的标准化参数。

点与点的距离函数

除了测试序列以外,DTW唯一需要的输入,就是距离函数 d (除了欧氏距离,也可以选择Mahalanobis距离等),所以不需要考虑输入的具体形式(一维或多维,离散或连续),只要能够给定合适的距离函数,就可以DTW比对。前面说到,DTW是对时间上的压缩和延展不敏感,但是对值的大小是敏感的,可以通过合理选取距离函数来让DTW适应值大小的差异。

5.具体应用场景

这里讨论两个具体应用DTW的可能场景:

分类

气象指数在旱季和雨季的样本序列分别为X1 X2 ,现有一段新的气象指数 Y ,要判断该气象指数测得时,是雨季还旱季?

算出DTW(X1, Y )和DTW(X2, Y ),小者即为与新测得气象指数更贴近,根据此作判断。

DTW就是一个很好的差异比较的工具,给出的距离(或标准化距离)能够进一步输入到KNN等分类器里(KNN就是要找最近的邻居,DTW能够用于衡量“近”与否),进行进一步分类,比对。

点到点匹配

给定标准语句的录音X,现有一段新的不标准的语句录音 Y <script type="math/tex" id="MathJax-Element-37">Y</script>,其中可能缺少或者掺入了别的字词。如何确定哪些是缺少的或者哪些是掺入别的?

通过DTW的扭曲路径,我们可以大致得到结论:

这里写图片描述

DTW的输出是很丰富的,除了距离外,还提供了扭曲路径,可用于点到点的匹配,这个信息是非常丰富的,能够看到序列的比对,发现异常的序列。


References
1.Giorgino, Toni. “Computing and visualizing dynamic time warping alignments in R: the dtw package.” Journal of statistical Software 31.7 (2009): 1-24.
2.Rabiner, Lawrence R., and Biing-Hwang Juang. Fundamentals of speech recognition. Vol. 14. Englewood Cliffs: PTR Prentice Hall, 1993.


  1. 这里用的是Quasi-symmetric准对称步模式(Step pattern)。 ↩

http://chatgpt.dhexx.cn/article/cFgOFDFr.shtml

相关文章

DTW学习笔记1.0

目录 DTW算法的目的&#xff1a; DTW算法实现&#xff1a; 以下图两段序列为例&#xff1a; DTW代码实现&#xff1a; Dynamic programming function 示例&#xff1a; 单变量示例&#xff1a; 比较序列相似性示例&#xff1a; 缺点&#xff1a; DTW算法的目的&#xf…

动态时间规整—DTW算法

简述 Dynamic Time Warping&#xff08;DTW&#xff09;诞生有一定的历史了&#xff08;日本学者Itakura提出&#xff09;&#xff0c;它出现的目的也比较单纯&#xff0c;是一种衡量两个长度不同的时间序列的相似度的方法。应用也比较广&#xff0c;主要是在模板匹配中&#…

语音信号处理之(一)动态时间规整(DTW)

语音信号处理之&#xff08;一&#xff09;动态时间规整&#xff08;DTW&#xff09; zouxy09qq.com http://blog.csdn.net/zouxy09 这学期有《语音信号处理》这门课&#xff0c;快考试了&#xff0c;所以也要了解了解相关的知识点。呵呵&#xff0c;平时没怎么听课&#xff…

【机器学习】【DTW】

转自&#xff1a;https://blog.csdn.net/zouxy09/article/details/9140207 一、概述 在大部分的学科中&#xff0c;时间序列是数据的一种常见表示形式。对于时间序列处理来说&#xff0c;一个普遍的任务就是比较两个序列的相似性。 在时间序列中&#xff0c;我们通常需要比较…

动态时间规整算法: 从DTW到FastDTW

目录 动态时间规整算法: 从DTW到FastDTW总结&#xff1a;简介[^1]DTW[^1]FastDTW&#xff1a;使用多级粗化的方法[^1]结果 动态时间规整算法: 从DTW到FastDTW 总结&#xff1a; FastDTW作者对DTW的改进点很巧妙&#xff01;先通过举例说明在一些情况下目前现有的方法对DTW改进…

机器学习算法(二十三):DTW(Dynamic Time Warping,动态时间调整)

目录 1 DTW&#xff08;动态时间调整&#xff09; 2 算法的实现 3 例子 4 python实现 ​​​​​​​5 DTW的加速算法FastDTW 5.1 标准DTW算法 5.2 DTW常用加速手段 5.3 FastDTW​​​​​​​ 1 DTW&#xff08;动态时间调整&#xff09; 动态时间调整算法是大多用于检…

初识DTW(动态时间规整)算法及Python实现例

目录 1. 概要 2. 时序列相似度度量 3. DTW基本算法 4. Python实现 5. Next Action 1. 概要 DTW&#xff08; Dynamic Time Warping&#xff0c;动态时间规整&#xff09;是基于动态规划&#xff08;Dynamic Programming&#xff09;策略对两个时序列通过非线性地进行时域对…

DTW基本原理

设时间归正函数为&#xff1a;&#xff0c;式中&#xff0c;N为路径长度&#xff0c;c(n)(i(n),j(n))表示第n个匹配点对是由参考模板的第i个特征矢量与待测模板的第j个特征矢量构成的匹配点对。两者之间的距离称为局部匹配距离。DTW算法就是通过局部优化的方法实现加权距离总和…

DTW算法——Matlab实现

概述 DTW &#xff08;Dynamic time warping&#xff09;算法是可以度量两个独立时间序列的相似度的一种方法。曾被广泛应用在单词音频的匹配上。该方法主要用来解决在两段序列的时长不同的情况下&#xff0c;进行相似度的判断。 上图中&#xff0c;左侧时长相等&#xff0c;…

DTW简介

dtw算法主要针对序列匹配提出的&#xff0c;尤其是当序列出现一定的飘移&#xff0c;欧氏距离度量就会失效。dtw常用在语音匹配当中&#xff0c;在图像处理里面也有一定的应用。 现在有两个序列X,Y. X[2,3,4,7,9,2,1,2,1],Y[1,1,1,1,2,3,3,4,7,8,9,1,1,1,1] 绘制在坐标轴上如…

DTW算法

dtw算法主要针对序列匹配提出的&#xff0c;尤其是当序列出现一定的飘移&#xff0c;欧氏距离度量就会失效。dtw常用在语音匹配当中&#xff0c;在图像处理里面也有一定的应用。 现在有两个序列X,Y. X[2,3,4,7,9,2,1,2,1],Y[1,1,1,1,2,3,3,4,7,8,9,1,1,1,1] 绘制在坐标轴上如…

HMM学习笔记_1(从一个实例中学习DTW算法)

DTW为(Dynamic Time Warping,动态时间归准)的简称。应用很广&#xff0c;主要是在模板匹配中&#xff0c;比如说用在孤立词语音识别&#xff0c;计算机视觉中的行为识别&#xff0c;信息检索等中。可能大家学过这些类似的课程都看到过这个算法&#xff0c;公式也有几个&#xf…

DTW(Dynamic Time Warping)动态时间规整——简单易懂

DTW可以用来干什么呢&#xff1f; DWT可以计算两个时间序列的相似度&#xff0c;尤其适用于不同长度、不同节奏的时间序列&#xff08;比如不同的人读同一个词的音频序列&#xff09;。距离越近&#xff0c;相似度越高。 DTW在语音中的运用&#xff1a; 在实际应用中&#xff…

DTW(动态时间归整)算法的前世今生

今天和大家分享一下我刚刚学习到的DTW算法。 主要从以下几个方面进行介绍&#xff1a; 1. DTW算法的提出和应用场景。 2. DTW算法的基本原理和计算过程。 3. DTW算法的具体代码实现。 一、DTW算法的提出和应用场景 Dynamic Time Warping&#xff08;简称&#xff1a;DTW&…

时间序列匹配之dtw的python实现(二)

简介 在上一篇文章里我们介绍了dtw库的使用&#xff0c;但其限制太多&#xff0c;不够灵活&#xff0c;且作图不够方便&#xff0c;因此我们来介绍一个更加复杂的库----dtw-python。它是R语言中dtw实现的python版本&#xff0c;基本的API是对应的&#xff0c;它的优势在于能够…

DTW算法详解

DTW算法详解 1.DTW 1.1 时序相似度 在时间序列数据中&#xff0c;一个常见的任务是比较两个序列的相似度&#xff0c;作为分类或聚类任务的基础。那么&#xff0c;时间序列的相似度应该如何计算呢&#xff1f; “ 经典的时间序列相似性度量方法总体被分为两 类: 锁步度量(lo…

动态时间规整算法(DTW)原理及代码实现

Dynamic Time Warping&#xff08;DTW&#xff09;动态时间规整算法 Dynamic Time Warping&#xff08;DTW&#xff09;是一种衡量两个时间序列之间的相似度的方法&#xff0c;主要应用在语音识别领域来识别两段语音是否表示同一个单词。 1. DTW方法原理 在时间序列中&#…

LOIC网站压力测试工具

官网下载&#xff1a;https://sourceforge.net/projects/loic/ 百度云&#xff1a;https://pan.baidu.com/s/1VVUjLqtq1mMAD-TJIAnhnQ 1.软件解压后运行&#xff0c;界面如图 2.然后可以在url处输入想要测试的网站网址&#xff0c;也可以输入ip地址&#xff0c;输入完之后要…

十大抢手的网站压力测试工具

两天&#xff0c;jnj在本站发布了《如何在低速率网络中测试 Web 应用》&#xff0c;那是测试网络不好的情况。而下面是十个免费的可以用来进行Web的负载/压力测试的工具&#xff0c;这样&#xff0c;你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量&#xff0c;以…

10大主流压力测试工具

市面上流行的压力/负载/性能测试工具多是来自国外&#xff0c;近年来国内的性能测试工具也如雨后春笋崛起。同时由于开发的目的和侧重点不同&#xff0c;其功能也有很大差异&#xff0c;下面就为您简单介绍10款目前最常见的测试产品。 1、kylinTOP测试与监控平台&#xff08;商…