時間序列挖掘-DTW加速算法FastDTW簡介


  本文地址為:http://www.cnblogs.com/kemaswill/,作者聯系方式為kemaswill@163.com,轉載請注明出處。

  關於DTW算法的簡介請見我的上一篇博客:時間序列挖掘-動態時間歸整算法原理和實現

  DTW采用動態規划來計算兩個時間序列之間的相似性,算法復雜度為O(N2)。當兩個時間序列都比較長時,DTW算法效率比較慢,不能滿足需求,為此,有許多對DTW進行加速的算法:FastDTW,SparseDTW,LB_Keogh,LB_Improved等。在這里我們介紹FastDTW。

  1. 標准DTW算法

  在DTW中,我們要尋找的是一個歸整路徑(詳見時間序列挖掘-動態時間歸整算法原理和實現),如下圖所示:

  最終我們想要得到的是這條路徑經過的所有點的坐標(i,j)對應的X和Y兩個時間序列的點Xi和Yj的距離(比如歐幾里得距離)之和,亦即我們需要求得代價矩陣最右上角的元素D(i,j)。而根據動態規划的思想:

  要求得D(i,j)必須要知道D(i-1,j), D(i-1,j-1), D(i,j-1)等,以此類推,我們需要求得整個D矩陣,才能得到最終的D(i,j),亦即算法的時間復雜度為O(N2)。

  2. DTW常用加速手段

  常用的DTW加速手段有:

  (1). 限制。亦即減少D的搜索空間,下圖中陰影部分為實際的探索空間,空白的部分不進行探索。

  (2). 數據抽象。亦即把之前長度為N的時間序列規約成長度為M(M<N)表述方式:

  (3). 索引。索引是在進行分類和聚類時減少需要運行的DTW的次數的方法,並不能加速一次的DTW計算。

  3. FastDTW

  FastDTW綜合使用限制和數據抽象兩種方法來加速DTW的計算,主要分為三個步驟:

  (1). 粗粒度化。亦即首先對原始的時間序列進行數據抽象,數據抽象可以迭代執行多次1/1->1/2->1/4->1/16,粗粒度數據點是其對應的多個細粒度數據點的平均值。

  (2). 投影。在較粗粒度上對時間序列運行DTW算法。

  (3). 細粒度化。將在較粗粒度上得到的歸整路徑經過的方格進一步細粒度化到較細粒度的時間序列上。除了進行細粒度化之外,我們還額外的在較細粒度的空間內額外向外(橫向,豎向,斜向)擴展K個粒度,K為半徑參數,一般取為1或者2.

  FastDTW算法的具體執行流程如下圖所示:

  第一個圖表示在較粗粒度空間(1/8)內執行DTW算法。第二個圖表示將較粗粒度空間(1/8)內求得的歸整路徑經過的方格細粒度化,並且向外(橫向,豎向,斜向)擴展一個(由半徑參數確定)細粒度單位后,再執行DTW得到的歸整路徑。第三個圖和第四個圖也是這樣。

  由於采取了減少搜索空間的策略,FastDTW並不一定能夠求得准確的DTW距離,但是FastDTW算法的時間復雜度比較低,為O(N)。

  參考文獻:

  [1]. FastDTW: Toward Accurate Dynamic Time Warping in Linear Time and Space. Stan Salvador, Philip Chan.

  [2]. Wikipedia: Dynamic Time Warping


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM