動態時間規整DTWhtml
1 概述算法
動態時間規整是一個計算時間序列之間距離的算法,是爲了解決語音識別領域中語速不一樣的狀況下如何計算距離類似度的問題。spa
相對於用經典的歐式距離來計算類似度而言,DTW在數據點個數不對齊的狀況下微調時間從而可以計算距離。htm
DTW之因此可以計算數據點個數不一樣時間序列之間的距離,是由於DTW方法中時間序列的點能夠一對多。blog
2 計算過程ip
用動態規劃算法計算DTW距離的過程以下所示,計算不一樣長度時間序列T和R之間的距離(假設T、R長度分別爲m、n)。圖中每個小方格中粗體值是兩兩點之間的距離,能夠是曼哈頓距離,也能夠是歐式距離等等,而右上角的值是走到當前位置的累加距離,累加距離的計算公式以下:it
走動的方向以下圖所示:循環
也就是說當前點的累加距離等於從當前點的下邊的點或者左邊的點或者左下邊的點走到當前點的距離的最小值。根據公式從點(1,1)開始計算,直至計算到(m,n),最後點(m,n)的累加距離就是時間序列T和R的DTW距離了。而從點(m,n)開始回溯到點(1,1)的路徑就是DTW計算的路徑了。須要說明的是,不一樣的時間序列T和R,即便它們的DTW距離相同,而DTW路徑也可能會不一樣。方法
注意,從公式中能夠看到,計算當前點的累加距離的時候,若是是從左下邊的點走過來的,則當前距離還要乘以2,能夠理解爲走了兩步。這樣作的目的是使得計算任意兩個長度爲m、n的時間序列的DTW距離時,從(1,1)走到(m,n)的步數是同樣的,都是m+n-2。這樣你們走的步數都同樣,DTW距離就能夠表示時間序列之間的類似性了,這種距離也叫長度歸一化後的距離。im
3 規整窗口
上面DTW計算的時候,路徑是點(1,1)出發,向右上角前進。整個矩陣都會掃一遍,全部的點的累加距離都會計算出來。這種狀況也叫做DTW, no Warping Window。
這樣作的缺點是,若是最終的路徑是從點(1,1)直線走到(1,F)再直線走到(4,F)。這說明T中的點1會對應R的A-F六個點,而後R中的F再對應T的2-4三個點。這樣規整的跨度有點大了,就再也不是微調時間序列中時間不對齊了,不符合實際呀。
因此又有了DTW with Warping Window,如今規整跨度,效果以下所示。只需稍微改動動態規劃的代碼的循環範圍。
參考資料:https://www.cnblogs.com/Daringoo/p/4095508.html
https://en.wikipedia.org/wiki/Dynamic_time_warping