日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态时间规整DTW

發布時間:2025/4/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态时间规整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算法,這種方法在語音識別,機器學習方便有著很重要的作用。

這個算法是基于動態規劃(DP)的思想,解決了發音長短不一的模板匹配問題,簡單來說,就是通過構建一個鄰接矩陣,尋找最短路徑和。

還以上面的2個序列作為例子,A中的10和B中的2對應以及A中的2和B中的10對應的時候,distance[3]以及distance[4]肯定是非常大的,這就直接導致了最后距離和的膨脹,這種時候,我們需要來調整下時間序列,如果我們讓A中的10和B中的10 對應,A中的1和B中的2對應,那么最后的距離和就將大大縮短,這種方式可以看做是一種時間扭曲,看到這里的時候,我相信應該會有人提出來,為什么不能使用A中的2與B中的2對應的問題,那樣的話距離和肯定是0了啊,距離應該是最小的吧,但這種情況是不允許的,因為A中的10是發生在2的前面,而B中的2則發生在10的前面,如果對應方式交叉的話會導致時間上的混亂,不符合因果關系。

接下來,以output[6][6](所有的記錄下標從1開始,開始的時候全部置0)記錄A,B之間的DTW距離,簡單的介紹一下具體的算法,這個算法其實就是一個簡單的DP,狀態轉移公式是output[i][j]=Min(Min(output[i-1][j],output[i][j-1]),output[i-1][j-1])+distance[i][j];最后得到的output[5][5]就是我們所需要的DTW距離.

?


動態時間規整DTW是一個典型的優化問題,它用滿足一定條件的的時間規整函數W(n)描述輸入模板和參考模板的時間對應關系,求解兩模板匹配時累計距離最小所對應的規整函數。

DTW ( Dynamic Time Warping ),即「動態時間扭曲」或是「動態時間規整」。這是一套根基于「動態規劃」(Dynamic Programming,簡稱DP)的方法,可以有效地將搜尋比對的時間大幅降低。
DTW 的目標就是要找出兩個向量之間的最短距離。一般而言,對于兩個 n 維空間中的向量 x 和 y,它們之間的距離可以定義為兩點之間的直線距離,稱為尤拉距離(Euclidean Distance)。
dist(x, y) = |x – y| ,
但是如果向量的長度不同,那它們之間的距離,就無法使用上述的數學式來計算。一般而言,假設這兩個向量的元素位置都是代表時間,由于我們必須容忍在時間軸的偏差,因此我們並不知道兩個向量的元素對應關系,因此我們必須靠著一套有效的運算方法,才可以找到最佳的對應關系。

?


動態規劃算法總體思想
動態規劃算法基本思想是將待求解問題分解成若干個子問題
但是經分解得到的子問題往往不是互相獨立的。不同子問題的數目常常只有多項式量級。求解時,有些子問題被重復計算了許多次。
如果能夠保存已解決的子問題的答案,而在需要時再找出已求得的答案,就可以避免大量重復計算,從而得到多項式時間算法。


動態規劃基本步驟
找出最優解的性質,并刻劃其結構特征。
遞歸地定義最優值。
以自底向上的方式計算出最優值。
根據計算最優值時得到的信息,構造最優解

?



?
這個例子中假設標準模板R為字母ABCDEF(6個),測試模板T為1234(4個)。R和T中各元素之間的距離已經給出。如下:

?

???? 既然是模板匹配,所以各分量的先后匹配順序已經確定了,雖然不是一一對應的。現在題目的目的是要計算出測試模板T和標準模板R之間的距離。因為2個模板的長度不同,所以其對應匹配的關系有很多種,我們需要找出其中距離最短的那條匹配路徑。現假設題目滿足如下的約束:當從一個方格((i-1,j-1)或者(i-1,j)或者(i,j-1))中到下一個方格(i,j),如果是橫著或者豎著的話其距離為d(i,j),如果是斜著對角線過來的則是2d(i,j).其約束條件如下圖像所示:

?

???? 其中g(i,j)表示2個模板都從起始分量逐次匹配,已經到了M中的i分量和T中的j分量,并且匹配到此步是2個模板之間的距離。并且都是在前一次匹配的結果上加d(i,j)或者2d(i,j),然后取最小值。

???? 所以我們將所有的匹配步驟標注后如下:

???? 怎么得來的呢?比如說g(1,1)=4, 當然前提都假設是g(0,0)=0,就是說g(1,1)=g(0,0)+2d(1,1)=0+2*2=4.

???? g(2,2)=9是一樣的道理。首先如果從g(1,2)來算的話是g(2,2)=g(1,2)+d(2,2)=5+4=9,因為是豎著上去的。

???? 如果從g(2,1)來算的話是g(2,2)=g(2,1)+d(2,2)=7+4=11,因為是橫著往右走的。

???? 如果從g(1,1)來算的話,g(2,2)=g(1,1)+2*d(2,2)=4+2*4=12.因為是斜著過去的。

???? 綜上所述,取最小值為9. 所有g(2,2)=9.

???? 當然在這之前要計算出g(1,1),g(2,1),g(1,2).因此計算g(I,j)也是有一定順序的。

其基本順序可以體現在如下:

?

???? 計算了第一排,其中每一個紅色的箭頭表示最小值來源的那個方向。當計算了第二排后的結果如下:

?

???? 最后都算完了的結果如下:

???? 到此為止,我們已經得到了答案,即2個模板直接的距離為26. 我們還可以通過回溯找到最短距離的路徑,通過箭頭方向反推回去。如下所示:



來自為知筆記(Wiz)



轉載于:https://www.cnblogs.com/sprint1989/p/3753772.html

總結

以上是生活随笔為你收集整理的动态时间规整DTW的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。