离散序列的一致性度量方法:动态时间规整(DTW)

动态时间规整:Dynamic Time Warping(DTW),是一种衡量两个离散时间序列相似度的方法,主要特点是在序列长度不一或x轴无法完全对齐的情况下,用满足一定条件的的时间规整函数描述两者之间的时间对应关系。DTW算法在各种模式匹配任务中被广泛使用,如语音识别、动态手势识别和信息检索等中。

一、算法简述

在数字信号处理领域中,时间序列是数据的一种常见表示形式。对于时间序列处理来说,对于许多的信号处理任务,如图像匹配、视频跟踪和姿态识别等,通常需要度量两个离散序列的相似性。而这一步骤说难不难,说易也不易,这往往需要考虑信号采样、噪声干扰等实际问题。

在很多情况下,单纯的相似性度量方法无法很好度量两个序列的一致性,如在语音识别中经常出现两段时间序列的长度不相等的情况(或下图中的情况),此时从直观上都能观察到,直接使用欧几里得距离、相关系数等方法进行度量并不靠谱,此时点对点运算变得无意义。

DTW的主要思路如下:

1.假定两个待匹配的离散数据分别为A={A(1),A(2),…,A(m)}和B={B(1),B(2),…,B(m)},其中下标为1的元素为序列的起点,下标为m/n的元素为序列终点。

2.为了对齐A,B两个序列,这里采用了“动态规划”的方法,首先构造一个m*n的矩阵,用于存放两序列点对点之间的距离(一般可使用欧氏距离),距离越小表明两点之间的相似度越高。

3.该部分是DTW算法的核心,这里把矩阵看成一个网格,算法的目的可总结为寻找一条通过此矩阵网格的最优路径,该路径通过的网格点即为两个离散序列经过对齐后的点对。

4.找到最优路径后,DTW算法定义了一个归整路径距离(Warp Path Distance),通过使用所有相似点之间距离的和,来衡量两个时间序列之间的相似性。

二、归整路径距离计算方法:

计算归整路径(Warp Path)。其形式可表示为:W={w1,w2,…,wK}。其中wk的形式为(i,j),其中i表示的是X中的i坐标,j表示的是Y中的j坐标。

这条路径不是随意选择的,需要满足以下几个约束:

1.边界条件:w1=(1, 1)和wK=(m, n)。

2.连续性:如果wk-1=(i,j),那么对于路径的下一个点wk=(i’,j’)需要满足:(i’-i)<=1和 (j’-j)<=1。因此只能和自己相邻的点对齐。这样可以保证序列A和B中的每个元素都在规整路径W中出现。

3.单调性:如果wk-1=(i,j),那么对于路径的下一个点wk=(i’,j’)需要满足:(i’-i)>=0和(j’-j)>=0。在这里需要假设A和B的顺序均是不可改变的。因此路径W在矩阵网格中的走势必须是随着时间单调递增的,如下图所示,整个过程是从矩阵网格的左下角出发,在右上角结束。

基于以上3个约束,规整路径的计算被简化为三种情况:

最后,需要定义一个累加距离dist,即从(0,0)点开始匹配两个序列A和B,每到一个点,之前所有的点计算的距离都会累加。到达终点(n,m)后,这个累积距离就描述了序列A和B的总体相似程度。累积距离dist(i,j)可以表示成以下公式:

其中,累积距离dist(i,j)为当前格点的距离d(A(i),B(j)),也就是两个序列A,B中的对应两点A(i)和B(j)的欧式距离与到达该点的最小的邻近元素的累积距离之和。

三、一个具体例子

参考:http://www.cnblogs.com/tornadomeet/archive/2012/03/23/2413363.html

四、Matlab代码实现

% 输入两段离散序列,输出两段序列的总欧式距离
function dist = dtw(t,r)
n = size(t,1);
m = size(r,1);

d = zeros(n,m);
for i = 1:n
    for j = 1:m
        d(i,j) = (t(i,:)-r(j,:)).^2;
    end
end

D = ones(n,m) * realmax;
D(1,1) = d(1,1);

for i = 1:n
    for j = 1:m
        if i==1&&j==1
        continue;
        end
        if i>1
        D1 = D(i-1,j);
        else
        D1 = realmax;
        end
    if j>1&&i>1
        D2 = D(i-1,j-1);
    else D2 = realmax;
    end
    if j>1
        D3 = D(i,j-1);
    else
        D3 = realmax;
    end
    D(i,j) = d(i,j) + min([D1,D2,D3]);
    end
end
dist = D(n,m);

五、参考链接和资料

http://blog.csdn.net/zouxy09/article/details/9140207

http://www.cnblogs.com/tornadomeet/archive/2012/03/23/2413363.html

http://www.baike.com/wiki/dtw

参考文献:Eamonn J. Keogh, Derivative Dynamic Time Warping

时间: 2024-10-10 15:11:42

离散序列的一致性度量方法:动态时间规整(DTW)的相关文章

动态时间规整DTW

来源: <http://www.cnblogs.com/flypiggy/p/3603192.html> 在日常的生活中我们最经常使用的距离毫无疑问应该是欧式距离,但是对于一些特殊情况,欧氏距离存在着其很明显的缺陷,比如说时间序列,举个比较简单的例子,序列A:1,1,1,10,2,3,序列B:1,1,1,2,10,3,如果用欧氏距离,也就是distance[i][j]=(b[j]-a[i])*(b[j]-a[i])来计算的话,总的距离和应该是128,应该说这个距离是非常大的,而实际上这个序列的

动态时间规整(DTW) 转载

Dynamic Time Warping(DTW)诞生有一定的历史了(日本学者Itakura提出),它出现的目的也比较单纯,是一种衡量两个长度不同的时间序列的相似度的方法.应用也比较广,主要是在模板匹配中,比如说用在孤立词语音识别(识别两段语音是否表示同一个单词),手势识别,数据挖掘和信息检索等中. 一.概述 在大部分的学科中,时间序列是数据的一种常见表示形式.对于时间序列处理来说,一个普遍的任务就是比较两个序列的相似性. 在时间序列中,需要比较相似性的两段时间序列的长度可能并不相等,在语音识别

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

语音信号处理之(一)动态时间规整(DTW) [email protected] 原文:http://blog.csdn.net/zouxy09 这学期有<语音信号处理>这门课,快考试了,所以也要了解了解相关的知识点.呵呵,平时没怎么听课,现在只能抱佛脚了.顺便也总结总结,好让自己的知识架构清晰点,也和大家分享下.下面总结的是第一个知识点:DTW.因为花的时间不多,所以可能会有不少说的不妥的地方,还望大家指正.谢谢. Dynamic Time Warping(DTW)诞生有一定的历史了(日本学者

动态时间规整算法

http://www.cnblogs.com/luxiaoxun/archive/2013/05/09/3069036.html Dynamic Time Warping(DTW)是一种衡量两个时间序列之间的相似度的方法,主要应用在语音识别领域来识别两段语音是否表示同一个单词. 1. DTW方法原理 在时间序列中,需要比较相似性的两段时间序列的长度可能并不相等,在语音识别领域表现为不同人的语速不同.而且同一个单词内的不同音素的发音速度也不同,比如有的人会把“A”这个音拖得很长,或者把“i”发的很

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

算法笔记-DTW动态时间规整 简介 简单的例子 定义 讨论 约束条件 步模式 标准化 点与点的距离函数 具体应用场景 分类 点到点匹配 算法笔记-DTW动态时间规整 动态时间规整/规划(Dynamic Time Warping, DTW)是一个比较老的算法,大概在1970年左右被提出来,最早用于处理语音方面识别分类的问题. 1.简介 简单来说,给定两个离散的序列(实际上不一定要与时间有关),DTW能够衡量这两个序列的相似程度,或者说两个序列的距离.同时DTW能够对两个序列的延展或者压缩能够有一定

动态时间归整/规整/弯曲(Dynamic time warping,DTW)

动态时间规整DTW 在日常的生活中我们最经常使用的距离毫无疑问应该是欧式距离,但是对于一些特殊情况,欧氏距离存在着其很明显的缺陷,比如说时间序列,举个比较简单的例子,序列A:1,1,1,10,2,3,序列B:1,1,1,2,10,3,如果用欧氏距离,也就是distance[i][j]=(b[j]-a[i])*(b[j]-a[i])来计算的话,总的距离和应该是128,应该说这个距离是非常大的,而实际上这个序列的图像是十分相似的,这种情况下就有人开始考虑寻找新的时间序列距离的计算方法,然后提出了DT

动态规划-时间规整算法

在日常的生活中我们最经常使用的距离毫无疑问应该是欧式距离,但是对于一些特殊情况,欧氏距离存在着其很明显的缺陷,比如说时间序列,举个比较简单的例子,序列A:1,1,1,10,2,3,序列B:1,1,1,2,10,3,如果用欧氏距离,也就是distance[i][j]=(b[j]-a[i])*(b[j]-a[i])来计算的话,总的距离和应该是128,应该说这个距离是非常大的,而实际上这个序列的图像是十分相似的,这种情况下就有人开始考虑寻找新的时间序列距离的计算方法,然后提出了DTW算法,这种方法在语

保证产品开发顺利实施的五个软件度量方法

开发一款高质量的软件产品属于软件工程范畴.变幻莫测的用户需求和苛刻的项目计划表很容易导致预算超支或者交付延迟.所以,项目做得越大,其功能也越复杂.正因为存在这么多因素的影响,项目质量很容易失去把控. 没有哪个工程可以离开精确的计量,而量化必须要借助一些度量方法才能实现. 因此,开发者需要一些软件度量方法来实现产品透明而又高质量的交付.因为当你在衡量你所说的话时,你需要用数字来体现你的失败或成功.你需要有一个计算公式来显示你在哪里薄弱,在哪里做得好.用Bob Parsons的话来说,"量化和监督能

在JSP页面中显示动态时间

源地址:http://blog.csdn.net/aitcax/article/details/41285305 静态时间: 1.页面首部添加 <%@page import="java.util.Date"%> 2.页面body中需要显示时间的地方使用 <%= new Date().toString() %> 即可. -------另:页面添加刷新按钮------ <input type="button" onclick="j