DTW动态规划调整

来源:互联网 发布:mc96f6432编程手册 编辑:程序博客网 时间:2024/06/04 03:50

DTW是一种衡量两个时间序列之间的相似度的方法,主要应用在语音识别领域来识别两段语音是否表示同一个单词。

1 DTW方法原理

在时间序列中,需要比较相似性的两段时间序列的长度可能并不相等,在语音识别领域表现为不同人的语速不同。而且同一个单词内的不同音素的发音速度也不同,比如有的人会把‘A’这个音拖得很长,或者把‘i’发的很短。另外,不同时间序列可能仅仅存在时间轴上的位移,亦即在还原位移的情况下,两个时间序列是一致的。在这些复杂情况下,使用传统的欧几里得距离无法有效地求的两个时间序列之间的距离(或者相似性)。

DTW通过把时间序列进行延伸和缩短,来计算两个时间序列性之间的相似性:

动态时间归整原理及python实现(Dynamic Time Warping, DTW),by 5lulu.com

如上图所示,上下两条实线代表两个时间序列,时间序列之间的虚线代表两个时间序列之间的相似的点。DTW使用所有这些相似点之间的距离的和,称之为归整路径距离(Warp Path Distance)来衡量两个时间序列之间的相似性。

2 DTW计算方法

令要计算相似度的两个时间序列为X和Y,长度分别为|X|和|Y|。

3 归整路径(Warp Path)

归整路径的形式为W=w1,w2,…,wK,其中Max(|X|,|Y|)<=K<=|X|+|Y|。

wk的形式为(i,j),其中i表示的是X中的i坐标,j表示的是Y中的j坐标。

归整路径W必须从w1=(1,1)开始,到wK=(|X|,|Y|)结尾,以保证X和Y中的每个坐标都在W中出现。

另外,W中w(i,j)的i和j必须是单调增加的,以保证图1中的虚线不会相交,所谓单调增加是指:

动态时间归整原理及python实现(Dynamic Time Warping, DTW),by 5lulu.com

我们最后要得到的归整路径是距离最短的一个归整路径:

动态时间归整原理及python实现(Dynamic Time Warping, DTW),by 5lulu.com

其中Dist(wki,wkj)为任意经典的距离计算方法,比如欧几里得距离。wki是指X的第i个数据点,wkj是指Y的第j个数据点。

4 DTW实现

在实现DTW时,我们采用动态规划的思想,其中D(i,j)表示长度为i和j的两个时间序列之间的归整路径距离:动态时间归整原理及python实现(Dynamic Time Warping, DTW),by 5lulu.com

我们最后求得的归整路径距离为D(|X|,|Y|),使用动态规划来进行求解:

动态时间归整原理及python实现(Dynamic Time Warping, DTW),by 5lulu.com

上图为代价矩阵(Cost Matrix) D,D(i,j)表示长度为i和j的两个时间序列之间的归整路径距离。


DTW实现的伪代码为

  1. int DTWDistance(s: array [1..n], t: array [1..m]) {
  2. DTW := array [0..n, 0..m]
  3.  
  4. for i := 1 to n
  5. DTW[i, 0] := infinity
  6. for i := 1 to m
  7. DTW[0, i] := infinity
  8. DTW[0, 0] := 0
  9.  
  10. for i := 1 to n
  11. for j := 1 to m
  12. cost:= d(s[i], t[j])
  13. DTW[i, j] := cost + minimum(DTW[i-1, j ], // insertion
  14. DTW[i , j-1], // deletion
  15. DTW[i-1, j-1]) // match
  16.  
  17. return DTW[n, m]
  18. }



DTW实现的Python代码

  1. def dtw(X,Y):
  2. X=[1,2,3,4]
  3. Y=[1,2,7,4,5]
  4. M=[[distance(X[i],Y[i]) for i in range(len(X))] for j in range(len(Y))]
  5. l1=len(X)
  6. l2=len(Y)
  7. D=[[0 for i in range(l1+1)] for i in range(l2+1)]
  8. D[0][0]=0
  9. for i in range(1,l1+1):
  10. D[0][i]=sys.maxint
  11. for j in range(1,l2+1):
  12. D[j][0]=sys.maxint
  13. for j in range(1,l2+1):
  14. for i in range(1,l1+1):
  15. D[j][i]=M[j-1][i-1]+Min(D[j-1][i],D[j][i-1],D[j-1][i-1]+M[j-1][i-1])


5加速

DTW虽然使用线性规划可以快速的求解,但是在面对比较长的时间序列是,O(N2)的时间复杂度还是很大。已经有很多改进的快速DTW算法,比如FastDTW,SparseDTW,LB_Keogh,LB_Improved等等。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 客户退保业务员己得保险佣金怎么办 投了简历公司打来电话没接到怎么办 跟老板要工资她说过几天怎么办 公路车弯把手小抓不到刹车怎么办 新手骑电动车上路车子一直晃怎么办 不知情收赃东西已经卖了怎么办 档案和派遣证不在同一个地方怎么办 档案缺招工表和派遣证怎么办退休 开发商对接的银行利息比较高怎么办 工作未满一年离职转正定级怎么办 被网络骗贷翻到几十万怎么办 面试通过后迟迟不通知入职怎么办 厂里捡到饭卡花了里面的钱怎么办 上班用自己手机打卡没电怎么办 逸尚考勤机显示超出考勤记录怎么办 下雨穿套裙工装上班好冷怎么办 蚂蚁借呗放款中不到账怎么办 护士电子化注册没有激活码怎么办? 地铁站务员入职体检身高差点怎么办 车子钥匙锁在车里了怎么办 打错账户了怎么办5天了 下岗失业人员在就业后档案怎么办 皮秒祛斑后没有敷面膜怎么办 硕士毕业工资好低不想工作怎么办 车卖了etc忘拿了怎么办 成熟卵泡打破卵针也不破怎么办? 深圳孩子户口挂别人名下上学怎么办 襄阳东风合运花园房贷怎么办下来 猫在外面躲起来找不到了怎么办 本科三批取消以后三本学校怎么办 机票名字多了个字母安检怎么办 出隧道口限速40超速了怎么办 社保交了五年后断交以后该怎么办 躺椅折叠椅坐的地方坏了怎么办 苹果手机锁频密码忘了怎么办 客户要货公司不给进怎么办 高铁23:00买的票怎么办 带电子手刹的车刹车失灵怎么办 下坡刹车失灵遇行人不看车怎么办 跟大车后面看不见红灯闯了怎么办 跟着大货车后面闯了红灯怎么办