在時間序列中,需要比較相似性的兩段時間序列的長度可能並不相等,比較顯著的例子是在語音識別領域表現為語速不同,不同人的語速不同,同一個人說同一句話的語速也會不同,那如何計算時間序列下的相似度呢?這時候會發現歐式距離有點失效了,因為長度不一致了,這時候就出現了DTW算法,它相當於對某個時間序列在時間軸進行了某種扭曲(Warping), 達到一定程度的對齊再計算相似度。
DTW可以計算兩個時間序列的相似度,尤其適用於不同長度、不同節奏的時間序列(比如不同的人讀同一個詞的音頻序列)。DTW將自動warping扭曲 時間序列(即在時間軸上進行局部的縮放),使得兩個序列的形態盡可能的一致,得到最大可能的相似度。
DTW采用了動態規划DP(dynamic programming)的方法來進行時間規整的計算,可以說,動態規划方法在時間規整問題上的應用就是DTW。
下面測試程序顯示了 6組時間序列 的DTW結果,左上和右下的兩組相似度較高,其DTW計算的距離(Warping Distance)也確實比較小。

DTW加速
DTW雖然使用線性規划可以快速的求解,但是在面對比較長的時間序列是,O(N2)的時間復雜度還是很大。已經有很多改進的快速DTW算法,比如FastDTW,SparseDTW,LB_Keogh,LB_Improved等等。
參考文獻:
[1]. FastDTW: Toward Accurate Dynamic Time Warping in Linear Time and Space. Stan Salvador, Philip Chan.
https://www.jianshu.com/p/4c905853711chttps://www.cnblogs.com/luxiaoxun/archive/2013/05/09/3069036.html