動態時間規整DTW
1 概述
動態時間規整是一個計算時間序列之間距離的算法,是為了解決語音識別領域中語速不同的情況下如何計算距離相似度的問題。
相對於用經典的歐式距離來計算相似度而言,DTW在數據點個數不對齊的情況下微調時間從而能夠計算距離。
DTW之所以能夠計算數據點個數不同時間序列之間的距離,是因為DTW方法中時間序列的點可以一對多。
2 計算過程
用動態規划算法計算DTW距離的過程如下所示,計算不同長度時間序列T和R之間的距離(假設T、R長度分別為m、n)。圖中每一個小方格中粗體值是兩兩點之間的距離,可以是曼哈頓距離,也可以是歐式距離等等,而右上角的值是走到當前位置的累加距離,累加距離的計算公式如下:
走動的方向如下圖所示:
也就是說當前點的累加距離等於從當前點的下邊的點或者左邊的點或者左下邊的點走到當前點的距離的最小值。根據公式從點(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距離就可以表示時間序列之間的相似性了,這種距離也叫長度歸一化后的距離。
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