动态时间规整算法DTW
動態時間規整算法(dynamic time warping,DTW),最早由日本學者Itakura提出,用于衡量兩個時間序列的相似度,也可用于將多個測試序列與標準序列對齊,從而實現序列長度的歸一化。
主要應用于語音識別、手勢識別、步態識別等領域。
在語言識別領域,同一個詞,由于不同個體發音習慣及語速的差異,采集得到的語音信號也呈現出相當大的隨機性。比如有的人會把“A”這個音拖得很長,或者把“i”發的很短。通常會表現為整體波形形狀相似,但在時間軸上不對齊。在這些復雜情況下,使用傳統的歐幾里得距離無法有效地求的兩個時間序列之間的距離(或者相似性)。DTW通過將序列數據的時間軸扭曲(warping),從而實現時間序列間的對齊。
?
動態時間規整DTW是一個典型的優化問題,它用滿足一定條件的的時間規整函數W(n)描述測試模板和參考模板的時間對應關系,求解兩模板匹配時累計距離最小所對應的規整函數。
?
實現步驟:
假設我們有兩個時間序列Q和C,他們的長度分別是n和m:
若n=m,可直接計算兩個序列的距離;若n!=m,最簡單的對齊方式就是線性縮放了。把短的序列線性放大到和長序列一樣的長度再比較,或者把長的線性縮短到和短序列一樣的長度再比較。但是這樣的計算沒有考慮到語音中各個段在不同情況下的持續時間會產生或長或短的變化,因此識別效果不可能最佳。實踐中,更多的是采用動態規劃(dynamic programming)的方法,具體如下:
為了對齊這兩個序列,我們需要構造一個n x m的矩陣網格,矩陣元素(i, j)表示qi和cj兩個點的距離d(qi, cj)(也就是序列Q的每一個點和C的每一個點之間的相似度,距離越小則相似度越高。),一般采用歐式距離,d(qi,cj)=(qi?cj)2。每一個矩陣元素(i, j)表示點qi和cj的對齊。DP算法可以歸結為尋找一條通過此網格中若干格點的路徑,路徑通過的格點即為兩個序列進行計算的對齊的點。?
這條路徑成為規整路徑(warping path),并用W來表示, W的第k個元素定義為wk=(i,j)k,定義了序列Q和C的映射。這樣我們有:
滿足上面這些約束條件的路徑可以有指數個,然后我們感興趣的是使得下面的規整代價最小的路徑:
K用來對長度做補償。同時定義累積距離r(i,j)。
從(0, 0)點開始匹配這兩個序列Q和C,每到一個點,之前所有的點計算的距離都會累加。到達終點(n, m)后,這個累積距離就是我們上面說的最后的總的距離,也就是序列Q和C的相似度。
累積距離γ(i,j)可以按下面的方式表示,累積距離γ(i,j)為當前格點距離d(i,j),也就是點qi和cj的歐式距離(相似性)與可以到達該點的最小的鄰近元素的累積距離之和:?
?
?
示例:
這個例子中假設標準模板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),然后取最小值。
所以我們將所有的匹配步驟標注后如下:
即2個模板直接的距離為26. 我們還可以通過回溯找到最短距離的路徑,通過箭頭方向反推回去。如下所示:
?
?
?
?
參考:
https://baike.baidu.com/item/動態時間規整/4732354?fr=aladdin
https://blog.csdn.net/qq_39516859/article/details/81705010
https://www.cnblogs.com/luxiaoxun/archive/2013/05/09/3069036.html ? (c++)
https://www.cnblogs.com/xingshansi/p/6924911.html ? (python)
總結
以上是生活随笔為你收集整理的动态时间规整算法DTW的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle11G安装在CentOS7.
- 下一篇: 阿里云linux系统目录结构