日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于动态规划DTW算法加速衡量两个不同的时间序列的相似性

發(fā)布時(shí)間:2023/12/9 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于动态规划DTW算法加速衡量两个不同的时间序列的相似性 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是DTW?

DTW算法采用了動(dòng)態(tài)規(guī)劃DP(dynamic programming)的方法來進(jìn)行時(shí)間規(guī)整的計(jì)算,可以說,動(dòng)態(tài)規(guī)劃方法在時(shí)間規(guī)整問題上的應(yīng)用就是DTW。

為什么需要DTW算法

當(dāng)兩個(gè)序列按照時(shí)間步t完全對齊的時(shí)候,我們可以直接使用ED算法(或者其它距離計(jì)算)來評估兩個(gè)算法的相似度。但是有些時(shí)候兩個(gè)序列并未完全對其,如果我們將某一序列進(jìn)行壓縮處理,此時(shí)會(huì)有信息損失。那么是否可以將兩個(gè)長度不一樣的序列進(jìn)行對齊,然后再進(jìn)行距離計(jì)算,DTW算法可以完成這個(gè)任務(wù)。

如圖所示,這兩個(gè)序列整體上波形很相似,但是在時(shí)間軸上確實(shí)對不齊的,所以這樣如果按照時(shí)間步t對應(yīng)來求距離顯然會(huì)出問題。

為了解決這個(gè)問題,我們需要進(jìn)行對齊操作:


如圖所示,就是應(yīng)用DTW算法之后的對齊之后的效果圖,那么此時(shí)我們對兩個(gè)序列的對應(yīng)點(diǎn)之間計(jì)算距離,此時(shí)才是這兩個(gè)序列的真實(shí)距離。

DTW的核心問題?

DTW核心是將兩個(gè)不同的序列按照最好的方式對齊,而如何才是最好對齊呢?對齊的方式有很多,最好的對齊方式就是兩個(gè)序列的距離最小,同時(shí)這個(gè)最小的距離就是這兩個(gè)序列的距離。

如圖所示,兩條完全不同的序列Q,C,如何才能對齊呢?

假設(shè)Q的序列長度為n,而C的序列長度為m,那么我們需要構(gòu)建一個(gè)n*m的矩陣,其中矩陣元素(i,j)表示Qi和Cj之間的距離。每個(gè)矩陣元素表示Qi和Cj對齊,那么從矩陣左下角到右上角可以找到很多路徑(為什么是從左下角到右上角,因?yàn)閮蓚€(gè)不同的序列無論長短,它們的起始點(diǎn)和終止點(diǎn)肯定是對應(yīng)的),這個(gè)矩陣包含了所有的對齊路徑,DP算法就是要找到一條最短的路徑。

路徑的性質(zhì)

首先這條路徑需要滿足一定的性質(zhì),它可以幫助算法對路徑進(jìn)行規(guī)范。

  • 邊界條件:必須從矩陣的左上角到矩陣的右上角

  • 連續(xù)性:路徑需要是連續(xù)的,不能跨越某點(diǎn)去匹配,(跨越其實(shí)也行,這樣會(huì)有信息損失)

  • 單調(diào)性:路徑必須隨著時(shí)間單調(diào)進(jìn)行,這樣路徑不會(huì)出現(xiàn)相交的情況。

  • 連續(xù)性和單調(diào)性決定了路徑中每一個(gè)格點(diǎn)只有三個(gè)方向,如果當(dāng)前格點(diǎn)為(i,j),那么下一個(gè)格點(diǎn)只能是下面的三種情況(i+1,j)、(i,j+1)、(i+1,j+1)

    當(dāng)然如果連續(xù)性中考慮跨越的情況,那么可能來自五個(gè)方向,此時(shí)從(m-2,n-1)到(m,n)會(huì)有信息損失

    本文中我們只考慮三種方向的情況。

    動(dòng)態(tài)規(guī)劃關(guān)系表達(dá)式

    現(xiàn)在我們已經(jīng)知道了路徑的規(guī)范條件了,那么這個(gè)問題的動(dòng)態(tài)規(guī)劃關(guān)系表達(dá)式為:

    我們拿g(i,j)=g(i-1,j)+d(i,j)來舉例,g(i-1,j)我們可以認(rèn)為是起點(diǎn)到g(i-1,j)的最短距離,然后d(i,j)表示Qi與Cj之間的距離。

    為什么有d還有2d呢?

    這個(gè)可以理解為人為設(shè)定的,我們這里設(shè)定當(dāng)路徑橫著走還有豎著走的時(shí)候,就是d,當(dāng)路徑斜著走的時(shí)候就是2d,也就是此時(shí)我們設(shè)定斜著走的時(shí)候損失大一些,d可以認(rèn)為是損失。

    現(xiàn)在有兩個(gè)序列R和T,現(xiàn)在我們構(gòu)建了一個(gè)矩陣,我們要找到從左下角到右上角的最短路徑,每個(gè)格子中數(shù)字表示Ri和Tj的距離,右上角表示總距離。我們來看一下B2是如何計(jì)算的:
    如果只能從三個(gè)方向來走的話,B2可以認(rèn)為來自B1、A1、A2,通過上面的動(dòng)態(tài)規(guī)劃關(guān)系式可以算出來

    A1+2B2=4+24=12

    B1+B2=7+4=11

    A2+B2=5+4=9

    所以從起點(diǎn)到B2的最短距離就是9,我們可以通過這種方式計(jì)算出格子的所有的點(diǎn),那么最終我們可以算出從起點(diǎn)到F4的最短距離就是26,這就是動(dòng)態(tài)規(guī)劃,而動(dòng)態(tài)規(guī)劃在時(shí)間序列的應(yīng)用就是DTW算法。

    但是這里就有一個(gè)問題了?以上僅僅比較兩條路徑就要計(jì)算這么多,如果多條路徑C與Q進(jìn)行匹配,那么這個(gè)計(jì)算量就太大了,也就是說時(shí)間復(fù)雜度太高了,需要進(jìn)行算法的改進(jìn)。所以人們在使用DTW算法的時(shí)候就會(huì)使用一些技巧,以次來提高計(jì)算速度。

    一些技巧

    去根號計(jì)算

    當(dāng)使用DTW算法的時(shí)候,需要計(jì)算Q與C之間不同i,j之間的距離,那么往往需要較大的計(jì)算量

    我們可以看到我們的目的是為了尋找最小的計(jì)算量,而去掉根號不影響其大小的比較,而根號的計(jì)算需要耗費(fèi)較多時(shí)間,所以一個(gè)技巧就是去掉根號。

    Lower Bounding


    如果正常的計(jì)算Q和C之間的DTW距離,這樣計(jì)算量很大,我們可以為Q設(shè)置上下界(U和L),然后使用U和L和C進(jìn)行距離計(jì)算(C和U、L之間直接通過對應(yīng)時(shí)間步計(jì)算,不用對齊),這個(gè)距離屬于估算,如果估算出來的這個(gè)距離大于設(shè)置閾值,我們就認(rèn)為Q和C之間的差距太大了,二者不匹配。Lower Bounding存在兩個(gè)算法變種:LB-kim和LB-koegh

    LB-kim:

    直接找到Q和C的四個(gè)對應(yīng)的點(diǎn),起始點(diǎn),終點(diǎn),最高點(diǎn),最低點(diǎn),計(jì)算這四個(gè)點(diǎn)的距離和,如果超過閾值,那么我們就認(rèn)為這個(gè)Q和C不匹配。

    LB-koegh:

    直接找到Q和C的兩個(gè)對應(yīng)的點(diǎn),最高點(diǎn)和最低點(diǎn),如果超過閾值我們就認(rèn)為這個(gè)Q和C不匹配。

    我們可以看出來這兩種方式計(jì)算的點(diǎn)比較少,所以計(jì)算量極少,速度會(huì)很快,但是會(huì)有問題,就是不精確,僅僅通過幾個(gè)點(diǎn)就確定了序列的匹配程度,這樣會(huì)有誤差的。

    Early Abandoning of ED and LB_Keogh

    這個(gè)是將ED和LB進(jìn)行結(jié)合,因?yàn)镋D計(jì)算(DTW)比較精確,但是計(jì)算量大,而LB比較粗略,但計(jì)算量小,我們將二者結(jié)合,如圖所示,我們將k=11之前使用DTW計(jì)算,K=11之后我們使用LB來計(jì)算,此時(shí)我們將二者加起來,如果這個(gè)超過閾值,我們就可以認(rèn)為Q和C不匹配

    一些新的技巧總結(jié)

    Early Abandoning Z-Normalization

    我們在使用DTW算法的時(shí)候,往往需要對數(shù)據(jù)進(jìn)行歸一化操作,這樣可以提高效率

    歸一化操作

    那么如果先進(jìn)行歸一化再進(jìn)行動(dòng)態(tài)規(guī)劃,這樣的問題就是一旦Q和C不匹配,那么就對C白白歸一化了,那么我們可以這樣的,每標(biāo)準(zhǔn)化一點(diǎn)就對這點(diǎn)進(jìn)行ED計(jì)算,如果計(jì)算過程中總距離一旦超過閾值,就立即停止計(jì)算,以后的也不用進(jìn)行歸一化了,這樣后面的點(diǎn)就不用歸一化了,這樣計(jì)算量就減少了。

    Reordering Early Abandoning

    DTW計(jì)算的時(shí)候,一般從序列匹配的起點(diǎn)開始計(jì)算,我們發(fā)現(xiàn)當(dāng)計(jì)算到第9個(gè)時(shí)間步的時(shí)候,那么就發(fā)現(xiàn)它超過了閾值,我們就認(rèn)為二者是不匹配的,就停止計(jì)算了

    現(xiàn)在我們計(jì)算的時(shí)候不從起點(diǎn)開始計(jì)算,比如我們可以從中間的某個(gè)特殊的時(shí)間步(一般是Q中距離均值0比較遠(yuǎn)的序列段,用這段來和C進(jìn)行距離計(jì)算,這個(gè)序列段再標(biāo)準(zhǔn)化的過程中就可以找到)計(jì)算。論文中的reorder early abounding 這部分的做法是對Q序列進(jìn)行norm處理,然后對所有時(shí)間點(diǎn)元素值取絕對值,最后進(jìn)行降序排列,以此來找到異常點(diǎn)?

    這樣,我們只計(jì)算(直接按照時(shí)間步計(jì)算距離,估算)了五個(gè)時(shí)間步就發(fā)現(xiàn),Q和C距離超過閾值,二者是不匹配的,這樣就直接停止計(jì)算。

    以Q為基礎(chǔ)的LB和以C為基礎(chǔ)的LB

    我們使用LB的方法都是對Q來使用的,然也可以對C來使用,這樣的好處是對Q使用可以過濾掉一部分不匹配的序列,對C使用又可以過濾掉一批不匹配的序列
    多種LB方式綜合使用

    我們可以看到橫軸表示時(shí)間復(fù)雜度,縱軸表示可靠性,我們可以認(rèn)為越靠近左上角的算法是越好的。

    總結(jié)

    我們需要找到與Q距離最短的C,當(dāng)序列很長和C數(shù)量很多的時(shí)候,一個(gè)很重要的問題就是過濾,也就是及時(shí)停止距離計(jì)算,上面的技巧就是在做這個(gè)工作,通過各種方式,只要發(fā)現(xiàn)Q和C的距離計(jì)算超過閾值就拋棄C,因?yàn)橛?jì)算Q和C之間的DTW真的很費(fèi)時(shí)間。

    參考論文:Searching and Mining Trillions of Time Series Subsequences under Dynamic Time Warping

    總結(jié)

    以上是生活随笔為你收集整理的基于动态规划DTW算法加速衡量两个不同的时间序列的相似性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。