概述
常見的距離度量尺度有:歐式距離,馬氏距離、曼哈頓距離。
歐式距離在n維空間中表示為:常用于計算兩個等長序列的相似性,序列可以包含股票、DNA等。對于不等長的序列,計算相似性關鍵是在于計算之前或者過程中,找到兩個時序數據上點的對應關系,因為它不像等長數據已經存在了數據點的一一對應關系。
等長數據,比如:比較近10天兩只開盤股票走勢k線圖
不等長數據,比如:相同時間內不同抽樣頻率(Hz)的心電圖、兩段“麻煩請開門”的語音音頻
因此,日本學者Itakura最早提出 Dynamic Time Warping(下文簡稱DTW,中文常翻譯為“動態時間規整”)算法,它出現的目的也比較單純,是一種衡量兩個長度不同的時間序列的相似度的方法——在對齊兩個序列的過程中通過定義的距離計算公式計算序列的相似度。其應用廣泛,主要在于模版匹配,如孤立詞語音識別、手勢識別、DNA序列配對等。
這里,距離計算公式包括(但不限于)上文提到的歐式距離。
DTW通過把時間序列進行延伸和縮短,來計算兩個時間序列性之間的相似性,規整后兩個序列之間的距離應該在所有對齊方案中是最小的,即達到feature-to-feature的對齊。
原理
以上面的Q,C序列為例,DTW算法的求解過程的直觀理解為構建一個nxn的矩陣(此處假設Q和C的時間序列長度都為n——當然也可以不等長——矩陣中的元素(i,j)表示序列Q的時間點qi和序列C的時間點cj之間的歐式距離),目標是在矩陣中找到一條從(0,0)到(n,n)的路徑,使得路徑上的所有元素之和最小。
“矩陣中的元素(i,j)表示序列Q的時間點qi和序列C的時間點cj之間的歐式距離”,下圖進行說明。
1.png
“目標是在矩陣中找到一條從(0,0)到(n,n)的路徑,使得路徑上的所有元素之和最小”,下圖進行說明。
這里提及dtw的幾個約束:
- local constraint(在矩陣中表示為定義的“步”的方向都得朝向右上角,每一步都得離終點更近,否則會導致crossing line)
- global constraint(不可跨越一定限度的數據點進行對齊,否則會導致對齊密度不均衡)
- start&ending contraint(頭尾數據點各自對齊)
- weight(路徑權重的設置,平衡業務偏好和local內的距離偏好)
- distance(距離度量方式)
允許在對齊過程中,有些點被跳過,沒有被對齊——取決于定義的“步”。
由于矩陣中路徑上的每個點都能分解為一個“多點到達”的子問題結構,因此dtw就是通過動態規劃法(dp,dynamic programming)進行求解的一個例子。
在后面給出的DTW算法的python簡單實現中,通過在循環中約束i和j的關系實現global constraint——通過簡單畫圖可以了解。
問題與優化
那簡單介紹完DTW的原理之后便引入了這篇論文《KDD2012 Best Paper-"Searching and Mining Trillions of Time Series Subsequences under Dynamic Time Warping”》[1]。
上文提到,DTW在多個領域都有所應用。隨著互聯網的到來和數據量的爆發(很多生產環境數據量早已突破萬億級別,而學術界仍停留在百萬、十億級數據集的研究上),原始DTW的實現弊病暴露,場景的應用對算法的性能提出了更高的要求,而該論文的核心正是通過對其他論文的review,現有優化方式的review以及對提出的計算優化方案的review來告訴我們,優化后的DTW(論文稱為UCR suite)仍然是最強最快的時序相似度計算方式。
論文首先指出以下假設或事實:
- 標準化(Z-normalization)非常重要,不僅需要在整個數據集上做,在計算兩序列相似度之前,還需要在兩個序列上單獨做。
- 在巨量數據集數據庫中檢索變長序列,理論上可行,但實際上不可行。
已知的優化方法:
- 計算過程中歐式距離使用平方代替平方根,直到獲得最小距離(的平方)時再開方獲得最終結果。
- 使用lower bound技術,偽代碼思想如下:
Algorithm Lower_Bounding_Sequential_Scan(Q)
best_so_far = infinity;
for all sequences in database
LB_dist = lower_bound_distance(Ci,Q);
if LB_dist < best_so_far
true_dist = DTW(Ci,Q);
if true_dist < best_so_far
best_so_far = true_dist;
index_of_best_match= i;
endif
endif
endfor
lower bound具體計算方法有多種,如穩重提到的LB_kim,LB_keogh。
- 在計算歐式距離或lower bound時采用早停技術。
- 因為計算DTW真實距離(最優路徑)時采用 DTW(Q1:K,C1:K) + LB_Keogh(QK+1:n,CK+1:n)作為實時的距離(為真實距離的lower bound,K為任一中間數據點序號),在此采用早停技術。
- 使用多核機器并行計算(眾所周知)。
論文提出的新的優化方法:
- 標準化比計算歐幾里得距離的耗時還要長一些,因此考慮在標準化過程中結合計算歐式距離或lower bound,引入早停技術。
- 對時序進行重排序
We conjecture that the universal optimal ordering is to sort the indices based on the absolute values of the Z-normalized Q.
For this we simply take each Ci and sort them, largest first, by their sum of their contributions to the Euclidean distance.
We compared this empirically optimal ordering with our predicted ordering (sorting the indices on the absolute values of Q) and found the rank correlation is 0.999.
- 對備查序列建立包絡,而不是查詢序列。
- 將多種lower bound計算方式串聯。
- 因為lower bound技術實證有助于加速搜索過程,因此在研究界對此的研究很繁榮。每一種的緊度(tightness)和計算速度都不盡相同。下圖為證:[圖片上傳失敗...(image-6d35f9-1571736906097)]
可見,緊度和計算復雜度是成正比的,因此沒有最佳的技術,只有最合適的技術。作者的想法是將這些技術從復雜度低到高串聯起來,如果計算完和lower bound計算完距離后沒有超過目前最小距離(the best-so-far),那就接著計算上述方案(早停版的DTW)——不管是O(1)還是O(nR),都遠小于O(n2)。
- 因為lower bound技術實證有助于加速搜索過程,因此在研究界對此的研究很繁榮。每一種的緊度(tightness)和計算速度都不盡相同。下圖為證:[圖片上傳失敗...(image-6d35f9-1571736906097)]
- 另外,對于存在重抽樣的序列(如[2.34, 2.34, 2.34, 2.01, 2.01, 2.01, 1.99, 1.99, 1.99,... ]),除了使用以上UCR-dtw方法,作者有以下建議:
- 先對原數據的子集按照比例n下采樣,使用UCR-dtw算法計算出距離rD;
- 再在完整數據集上運行,提前設置參照距離為rD*10。
- 如此之后,在特定數據集上能提升3倍的速度。
未完待續,歡迎留言交流。
此處可獲取代碼,結合理解