Anda di halaman 1dari 10

[image processing] January 30, 2012

DYNAMIC TIME WARPING ALGORITHM (DTW)

DTW [Sakoe , H. & S. Chiba] adalah algoritma yang menghitung warping path yang optimal
antara dua runtun data sehingga outputnya adalah nilai-nilai warping path dan jarak diantara
kedua runtun tersebut. DTW atau Dynamic Time Wrapping merupakan algoritma yang sudah
dikenal luas. Algoritma ini diperkenalkan sekitar tahun 60an, baru sekitar tahun 70an secara
luas digunakan untuk aplikasi pengenalan suara (speech recognition), pengenalan tulisan
tangan dan tandatangan, data mining, pengklusteran, pengolahan isyarat dan musik dan banyak
lagi.

Algoritma DTW disebut juga sebagai non-linear sequence alignment, sehingga algoritma ini lebih
realistis untuk digunakan dalam mengukur kemiripan suatu pola (pattern/template matching)
ketimbang hanya menggunakan algoritma pengukuran linier seperti Euclidean Distance,
Manhattan, Canberra, Mexican Hat dan lainnya. Data yang diolah selalu berada dalam kawasan
waktu, sehingga rentetan data yang kita punya dianggap bervariasi terhadap waktu.

Algoritma DTW yang kerap digunakan sebagai pengukur kemiripan pola, akan mengukur
kemiripan dari dua buah data. Data ini biasanya merupakan feature atau ciri dari data asli yang
ukurannya lebih besar. Algoritma ini terkenal sangat efisien dalam mengukur jarak kemiripan
antar dua data yang meminimalkan pengaruh pergeseran dan distorsi dalam waktu sehingga
walau berbeda phase, masih bisa dideteksi. DTW bisa dipisahkan menjadi classical dan novel.
Kebanyakan pemisahan itu semata-mata berdasar pada objective function nya. Banyak ahli telah
merumuskan objective function yang baru ditinjau dari banyak sisi. Dalam artikel ini kita akan
bahas hanya DTW classical.

Anggap kita memiliki dua buah runtun data (‫ݔ‬ଵ , ‫ݔ‬ଶ , ‫ݔ‬ଷ , … , ‫ݔ‬௡ ) dan (‫ݕ‬ଵ , ‫ݕ‬ଶ , ‫ݕ‬ଷ , … , ‫ݕ‬௠ ) yang tentu
saja panjang runtun data bisa berbeda, berarti n=m atau n≠m. Tahap awal dari algoritma DTW
adalah menghitung jarak local (local distance) antar elemen dari kedua runtun menggunakan
teknik penghitungan jarak yang berbeda, biasanya yang digunakan adalah Euclidean Distance.
Dalam artikel ini kita akan menggunakan teknik tersebut dan tidak akan dijelaskan karena
merupakan cara yang sudah umum digunakan. Maka local distance nya dihitung dengan
mencari nilai absolute dari selisih kedua runtun data yang dirumuskan dengan

ܿ௜௝ = ห‫ݔ‬௜ − ‫ݕ‬௝ ห, ݅ = 1: ݊ ݀ܽ݊ ݆ = 1: ݉

Langkah selanjutnya merupakan point-point yang harus kita lewati untuk menemukan warping
path.

[janshendry@gmail.com{ee&it ugm, indonesia}] Page 1


[image processing] January 30, 2012

- Baris pertama


1,   "  ,


# ,  ∈ %1, &'
#(

- Kolom pertama

, 1  " # ,


 ,  ∈ %1, )'
#(

- Elemen lainnya
‫݅(ܦ‬,    ,
   min*
min  1,   1 ,   1,  , ,   1 + ,  ∈ %%1, )',
)  ∈ %1, &'

Warping path merupakan jalur/lintasan atau path yang melalui matriks yang berisi jarak
minimal (minimal distance) dari elemen ,  hingga elemen ), & yang terdiri dari elemen-
elemen
elemen ,  itu sendiri.

Ada 3 ketentuan dalam algoritma DTW baik yang classical maupun novel (baru).

 Monotonicity
Artinya proses mengikuti urutan berdasar waktu.
 ,  … , -

 ,
 … ,
-
Tujuannya agar proses bisa dilakukan straightforward sehingga kita tidak mengolah
data yang sama berulangkali (tidak terjadi perulangan).

 Continuity
Artinya indeks dari data yang akan diproses selanjutnya tidak serta-merta
merta melompat ke
indeks yang jaraknya jauh. Jarak antara data yang pertama dengan yang selanjutnya
adalah maksimal 1.
./012  ./011 3 1
Tujuannya agar tidak ada bagian dari data yang memang penting yang tidak diikutkan
dalam proses.
[image processing] January 30, 2012

 Boundary Conditions
Artinya titik awal dan titik akhir dari warping path adalah titik-titik
tik awal dan akhir dari
sekuen/rangkaian data (sequence). Ini sebuah keharusan...
4  1,1
4#  &, )
Tujuannya data yang kita punya
punya diproses seluruhnya mulai dari awal hingga akhir.

Ada 1 tambahan yang jarang saya temukan di banyak artikel.

 Warping Window
Dalam DTW, alignment yang bagus adalah yang tidak terlalu jauh dari garis diagonal
antar ke dua vektor data yang akan diolah. Untuk itu perlu
Tujuannya agar
[image processing] January 30, 2012

Berikut ini adalah algoritma pemrograman yang bisa diikuti untuk menghasilkan code dari
DTW classical.

- Bagian ini disebut dengan AccumulatedCostMatrix.

ketika Accumulated Cost Matrix sudah terbentuk, warping path bisa ditemukan yang dimulai
dari point paling akhir (N,M) melangkah hingga ke point awal (1,1). Perhatikan ilustrasi gambar
di bawah ini
[image processing] January 30, 2012

- Bagian ini disebut sebagai OptimalWarpingPath yang tujuannya untuk menghitung


Optimal Path dari matriks yang terbentuk oleh AccumulatedCostMatrix.

Program Matlab untuk menghitung Optimal Path dengan menggunakan DTW.

Ada 2 versi yang saya buat, yang pertama mengikuti cara yang dijelaskan di artikel ini dan yang
kedua memberikan visual yang berbeda. Tapi algoritma yang dipakai persis sama.

Program pertama

% classical DTW (dynamic time warping) algorithm


% jans hendry
% EE of universitas gadjah mada
% Indonesia

clear all;
close all;
clc;

%% Mempersiapkan data

% X = 1 + (-1-1).*rand(20,1);
% Y = 1 + (-1-1).*rand(20,1);
% t=0:1/10:pi;
% Y = sin(t);
% X = sin(t);
% X = cos(t);
% X = cos(2*t);
X = [3 -13 14 -7 9 -2];
Y = [-2 10 -10 15 -13 20 -5 14 2];

subplot(222),
[image processing] January 30, 2012

plot(1:length(X),X,'-ro',...
'MarkerFaceColor','g',...
'MarkerSize',5);
title('Feature 1');
xlabel('x');
axis off

subplot(223),
plot(Y,1:length(Y),'-go',...
'MarkerFaceColor','r',...
'MarkerSize',5);
title('Feature 2');
ylabel('x');
axis off

%%

%% AccumulatedCostMatrix (X;Y;C)

n = length(X);
m = length(Y);

% c = zeros(n,m);
% for ii = 1:n
% for jj = 1:m
% c(ii,jj) = (X(ii) - Y(jj))^2;
% end
% end
c=abs((repmat(X(:),1,m)-repmat(Y(:)',n,1)));

dtw = zeros(n,m);
% kolom pertama
% for ii = 2:n
% dtw(ii,1) = dtw(ii-1,1) + c(ii,1);
% end
dtw(:,1) = cumsum(c(:,1));

% baris pertama
% for jj = 2:m
% dtw(1,jj) = dtw(1,jj-1) + c(1,jj);
% end
dtw(1,:) = cumsum(c(1,:));

for ii = 2:n
for jj = 2:m
dtw(ii,jj) = c(ii,jj) + min([dtw(ii-1,jj),dtw(ii,jj-1),dtw(ii-1,jj-1)]);
end
end
temp = dtw;
%%

%% OptimalPath

path = [];
n = size(dtw,1);
m = size(dtw,2);

while (n + m > 2)
if n == 1
m = m - 1;
elseif m == 1
n = n - 1;
else
minimal = min([dtw(n-1,m),dtw(n,m-1),dtw(n-1,m-1)]);
if dtw(n-1,m) == minimal
n = n-1;
elseif dtw(n,m-1) == minimal
m = m-1;

[janshendry@gmail.com{ee&it ugm, indonesia}] Page 6


[image processing] January 30, 2012

else
n = n-1;
m = m-1;
end
end
path = [path;n,m];
end
path = [size(dtw,1),size(dtw,2);path];

jalur = zeros(1,size(path,1));
for k1=1:size(path,1)
jalur(k1) = dtw(path(k1,1),path(k1,2));
end
jumpoints = size(path,1);

subplot(224),
plot(path(:,2),path(:,1),'-.k*',...
'MarkerFaceColor','b',...
'MarkerSize',5);
title('Optimal Path');
axis off
%%

%% menampilkan visualisasi dari optimal path

figure,
mm=size(dtw,1);
nn=size(dtw,2);
[MM NN]=meshgrid(1:mm,1:nn);
plot(NN,MM,'ro',...
'MarkerFaceColor','r',...
'MarkerSize',1);
for k1 = 1:mm
for k2 = 1:nn
text(k2,k1,sprintf('%d',dtw(k1,k2)));
end
end
hold on;
plot(path(:,2),path(:,1),'-.ks',...
'MarkerFaceColor','r',...
'MarkerSize',5);
title('Optimal Path');
axis([0 nn+1 0 mm+1]);
hold off;
axis off;

%%

Hasil eksekusi
[image processing] January 30, 2012

Program kedua

% classical DTW (dynamic time warping) algorithm


% jans hendry
% EE of universitas gadjah mada
% Indonesia

clear all;
close all;
clc;

%% Mempersiapkan data

% jenis-jenis input test


% X = 1 + (-1-1).*rand(5,1);
% Y = 1 + (-1-1).*rand(5,1);
% t1 = 0:1/1:pi;
% t2 = 0:1/1:pi;
% Y = sin(t1);
% X = sin(t2);
% X = cos(t);
% X = cos(2*t);
X = [3 -13 14 -7 9 -2];
Y = [-2 10 -10 15 -13 20 -5 14 2];

n = length(X);
m = length(Y);

% plotting
subplot(222),
plot(1:length(Y),Y,'-ro',...
'MarkerFaceColor','g',...
'MarkerSize',5);
title('Y');
xlabel('time');
axis off;

subplot(223),
plot(fliplr(X),1:length(X),'-go',...
'MarkerFaceColor','r',...
'MarkerSize',5);
title('X');
ylabel('time');
axis off
%%

%% AccumulatedCostMatrix (X;Y;C)

% local distance
c = abs((repmat(X(:),1,m)-repmat(Y(:)',n,1)));
dtw = zeros(size(c));

% kolom pertama
dtw(:,1) = cumsum(c(:,1));

% baris pertama
dtw(1,:) = cumsum(c(1,:));

% global distance
for ii = 2:n
for jj = 2:m
dtw(ii,jj) = c(ii,jj) + min([dtw(ii-1,jj),dtw(ii,jj-1),dtw(ii-1,jj-1)]);
end
end
%%

[janshendry@gmail.com{ee&it ugm, indonesia}] Page 8


[image processing] January 30, 2012

%% OptimalPath

path = [];
n = size(dtw,1);
m = size(dtw,2);

while (n + m > 2)
if n == 1
m = m - 1;
elseif m == 1
n = n - 1;
else
minimal = min([dtw(n-1,m),dtw(n,m-1),dtw(n-1,m-1)]);
if dtw(n-1,m) == minimal
n = n-1;
elseif dtw(n,m-1) == minimal
m = m-1;
else
n = n-1;
m = m-1;
end
end
path = [path; n,m];
end
path = [size(dtw,1),size(dtw,2); path];
jumpoints = size(path,1);

subplot(224),
plot(path(:,2),6+1-path(:,1),'-.ks',...
'MarkerFaceColor','r',...
'MarkerSize',5);
title('Optimal Path');
axis off
%%

%% menampilkan visualisasi dari optimal path

figure,
mm=size(dtw,1);
nn=size(dtw,2);
[MM NN]=meshgrid(1:mm,1:nn);
plot(NN,MM,'ro',...
'MarkerFaceColor','r',...
'MarkerSize',1);
for k1=mm:-1:1
for k2=nn:-1:1
text(k2,mm-k1+1,sprintf('%d',dtw(k1,k2)));
end
end
hold on;
plot(path(:,2),6-path(:,1)+1,'-.ks',...
'MarkerFaceColor','r',...
'MarkerSize',5);
title('Optimal Path');
axis([0 nn+1 0 mm+1]);
hold off;
axis off;
%%

[janshendry@gmail.com{ee&it ugm, indonesia}] Page 9


[image processing] January 30, 2012

Hasil eksekusi

Semoga bisa sedikit membantu anda dalam memahami DTW. Aplikasi dari DTW akan dibahas
pada projek speaker recognition dan juga projek speech recognition pada artikel berikutnya.

@thanks…

Sources:

Dynamic Time Warping Algorithm Review


Pavel Senin
Information and Computer Science Department
University of Hawaii at Manoa
Honolulu, USA

Dynamic Time Warping Algorithm for Gene Expression Time Series


Elena Tsiporkova

Dynamic Programming Algorithms in Speech Recognition


Titus Felix FURTUNĂ
Academy of Economic Studies, Bucharest

Anda mungkin juga menyukai