Dynamic Time Warping Distance PDF
Dynamic Time Warping Distance PDF
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
Langkah selanjutnya merupakan point-point yang harus kita lewati untuk menemukan warping
path.
- Baris pertama
- Kolom pertama
- 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.
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.
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
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
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;
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
%%
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
clear all;
close all;
clc;
%% Mempersiapkan data
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
%%
%% 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
%%
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;
%%
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: