DTW動(dòng)態(tài)時(shí)間規(guī)整算法

一.目的

時(shí)間序列是數(shù)據(jù)的一種常見表示形式柏卤,對(duì)于處理時(shí)間序列來說县貌,一個(gè)普遍的任務(wù)就是比較兩個(gè)序列的相似性缸夹。但是在實(shí)際問題中痪寻,大部分時(shí)間序列都是不等長的,有的序列可能波形類似虽惭,但是時(shí)間錯(cuò)位橡类。如下圖所示,虛線與實(shí)線波形是類似的趟妥,但是波峰錯(cuò)位猫态,這種情況下,如果直接使用歐式距離來表示時(shí)間序列的相似性顯然不合理。DTW出現(xiàn)的目的很簡單亲雪,就是為了合理的衡量兩條時(shí)間序列的距離(或者說叫相似性)勇凭,而且不要求兩條序列長度相等。


二.簡單理解DTW

簡單來說义辕,DTW就是捏住兩條序列的頭和尾虾标,瘋狂的蹂躪它們,拉伸短的灌砖,壓縮長的璧函,使得它們長度對(duì)齊』裕可是落實(shí)到實(shí)際序列點(diǎn)上怎么才能對(duì)齊呢蘸吓?其實(shí)就是讓序列點(diǎn)間發(fā)生一對(duì)多或者多對(duì)一的對(duì)應(yīng)關(guān)系。如上圖所示撩幽,每個(gè)紅圈點(diǎn)都對(duì)應(yīng)了很多個(gè)點(diǎn)库继,這樣就可以達(dá)到序列對(duì)齊的目的。
現(xiàn)在窜醉,問題就轉(zhuǎn)化成為了宪萄,如何尋找兩條序列上點(diǎn)的對(duì)應(yīng)關(guān)系,且滿足所有對(duì)應(yīng)點(diǎn)間的距離和最小榨惰。這是一個(gè)很明顯的優(yōu)化問題拜英。

三.求解DTW

假設(shè)我們有兩個(gè)時(shí)間序列A和B,他們的長度分別是n和m:

A= a1, a2,…, aj,…, am ;
B = b1, b2,…,bi,…, bn ;

為了對(duì)齊這兩個(gè)序列琅催,我們需要構(gòu)造一個(gè)下圖所示的n x m的矩陣網(wǎng)格居凶,矩陣元素(i, j)表示ai和bj兩個(gè)點(diǎn)的距離dij(也就是序列A的每一個(gè)點(diǎn)和B的每一個(gè)點(diǎn)之間的相似度,距離越小則相似度越高恢暖。)排监,一般采用歐式距離,dij=(ai?bj)**2 杰捂,也可以采用絕對(duì)值距離 Abs(ai-bj)舆床。
現(xiàn)在問題轉(zhuǎn)化成了,從左下角(1,1)位置開始嫁佳,到(n,m)點(diǎn)挨队,找到一條距離和最短的路徑。


那么這條路徑我們怎么找到呢蒿往?哪條路徑才是最好的呢盛垦?
我們把這條路徑定義為規(guī)整路徑,并用W來表示瓤漏,這條路徑不是隨意選擇的腾夯,需要滿足以下幾個(gè)約束:
1. 邊界條件:
因?yàn)槲覀冃枰獙蓷l序列對(duì)齊颊埃,所以路徑的起點(diǎn)必須是(1,1),終點(diǎn)必須是(n,m)蝶俱。
2. 連續(xù)性:
如果路徑W上的節(jié)點(diǎn)wk-1= (a’, b’)班利,那么對(duì)于路徑的下一個(gè)點(diǎn)wk=(a, b)需要滿足 (a-a’) <=1和 (b-b’) <=1。也就是不可能跨過某個(gè)點(diǎn)去匹配榨呆,只能和自己相鄰的點(diǎn)對(duì)齊罗标。這樣可以保證A和B中的每個(gè)坐標(biāo)都在W中出現(xiàn)。
3. 單調(diào)性:
如果wk-1= (a’, b’)积蜻,那么對(duì)于路徑的下一個(gè)點(diǎn)wk=(a, b)需要滿足0<=(a-a’)和0<= (b-b’)闯割。這限制W上面的點(diǎn)必須是隨著時(shí)間單調(diào)進(jìn)行的。

結(jié)合連續(xù)性和單調(diào)性約束竿拆,每一個(gè)格點(diǎn)的路徑就只有三個(gè)方向了宙拉。例如如果路徑已經(jīng)通過了格點(diǎn)(i, j),那么下一個(gè)通過的格點(diǎn)只可能是下列三種情況之一:(i+1, j)如输,(i, j+1)或者(i+1, j+1)鼓黔。



這是一個(gè)顯然的動(dòng)態(tài)規(guī)劃策略央勒,假設(shè)我們要求到位置(i,j)的最小累計(jì)距離D(i,j)不见,那么它只能由: D(i?1,j) ; D(i,j?1)崔步; D(i,j) 這三個(gè)位置的最小累計(jì)距離中尋找稳吮,也就是:

其中邊界,D(0,0)=0; D(-1,0)=∞井濒,D(0灶似,-1)=∞

四. 舉個(gè)例子

比如說,給定一個(gè)樣本序列X和比對(duì)序列Y:

X:3瑞你,5酪惭,6,7者甲,7春感,1

Y:3,6虏缸,6鲫懒,7,8刽辙,1窥岩,1

DTW首先會(huì)根據(jù)序列點(diǎn)之間的距離(這里使用絕對(duì)距離),獲得一個(gè)序列距離矩陣 M(序列中任意兩點(diǎn)間的距離都要計(jì)算)宰缤。


然后根據(jù)距離矩陣颂翼,使用DP算法的遞推關(guān)系式晃洒,得到累計(jì)距離矩陣(或稱代價(jià)矩陣)D:



最后,兩個(gè)序列的距離朦乏,由代價(jià)矩陣最后一行最后一列給出锥累,在這里也就是2。

五. 代碼


import numpy as np
def DTW_distance(series_a,series_b):
    
    series_a=np.array(series_a)
    series_b=np.array(series_b)
    len_a=np.size(series_a)
    len_b=np.size(series_b)
    
    #計(jì)算序列間的絕對(duì)距離,距離矩陣M
    ABS_distance={}
    for i in range(len_a):
        for j in range(len_b):
            ABS_distance[(i,j)]=np.abs(series_a[i]-series_b[j])
            
    #利用DP算法求解最優(yōu)路徑
    #由于數(shù)組從0開始集歇,元素必定從(0,0)位置出發(fā)桶略,初始位置的代價(jià)就是其本身的距離
    D={(0,0):ABS_distance[(0,0)]}
    #首先求解第一行與第一列的累計(jì)距離(代價(jià)),因?yàn)樗麄兊纳弦徊轿ㄒ淮_定
    for i in range(1,len_a):
        D[(i,0)]=ABS_distance[(i,0)]+D[(i-1,0)]
        
    for i in range(1,len_b):
        D[(0,i)]=ABS_distance[(0,i)]+D[(0,i-1)]
        
    #求解其他位置
    for i in range(1,len_a):
        for j in range(1,len_b):
            D[(i,j)]=ABS_distance[(i,j)]+min(D[(i-1,j),D[(i,j-1),D[(i-1,j-1)])
            
    return D

參考:
https://blog.csdn.net/qq_39516859/article/details/81705010
https://blog.csdn.net/raym0ndkwan/article/details/45614813

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诲宇,一起剝皮案震驚了整個(gè)濱河市际歼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姑蓝,老刑警劉巖鹅心,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纺荧,居然都是意外死亡旭愧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門宙暇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來输枯,“玉大人,你說我怎么就攤上這事占贫√蚁ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵型奥,是天一觀的道長瞳收。 經(jīng)常有香客問我,道長厢汹,這世上最難降的妖魔是什么螟深? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮烫葬,結(jié)果婚禮上界弧,老公的妹妹穿的比我還像新娘。我一直安慰自己厘灼,他們只是感情好夹纫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著设凹,像睡著了一般舰讹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闪朱,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天月匣,我揣著相機(jī)與錄音钻洒,去河邊找鬼。 笑死锄开,一個(gè)胖子當(dāng)著我的面吹牛素标,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萍悴,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼头遭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了癣诱?” 一聲冷哼從身側(cè)響起计维,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撕予,沒想到半個(gè)月后鲫惶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡实抡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年欠母,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吆寨。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赏淌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸟废,到底是詐尸還是另有隱情猜敢,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布盒延,位于F島的核電站,受9級(jí)特大地震影響鼠冕,放射性物質(zhì)發(fā)生泄漏添寺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一懈费、第九天 我趴在偏房一處隱蔽的房頂上張望计露。 院中可真熱鬧,春花似錦憎乙、人聲如沸票罐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽该押。三九已至,卻和暖如春阵谚,著一層夾襖步出監(jiān)牢的瞬間蚕礼,已是汗流浹背烟具。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奠蹬,地道東北人朝聋。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像囤躁,于是被迫代替她去往敵國和親冀痕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353