Deformación dinámica del tiempo

DTW (Dynamic Time Warping) adalah salah satu metode yang digunakan untuk mengukur kemiripan antara data deret waktu. Ketika membandingkan dua bentuk gelombang, tidak jelas titik mana yang sesuai dengan titik yang mana jika panjang gelombangnya berbeda; DTW menemukan jarak antara setiap titik dari dua deret waktu dengan brute force dan menemukan kombinasi terkecil di antara semua pola. Dengan cara ini, dimungkinkan untuk menemukan bentuk gelombang yang bentuknya mirip, bahkan jika gelombangnya sedikit berbeda. Halaman ini menggunakan "fastdtw" untuk menemukan kesamaan antara data deret waktu.

import numpy as np
import matplotlib.pyplot as plt
from fastdtw import fastdtw

Plot the two waveforms used in the experiment

data1 = [91.0 * np.sin(i / 2.1) for i in range(30)]
data2 = [100.0 * np.sin(i / 2.0) + np.random.rand() for i in range(30)]
data3 = [50.0 * np.cos(i / 2.0) + np.random.rand() for i in range(30)]

plt.figure(figsize=(12, 4))

# Memplot Bentuk Gelombang
plt.plot(data1, label="data1", color="k")
plt.plot(data2, label="data2", color="r")
plt.plot(data3, label="data3", color="b")
plt.legend()
plt.show()

png

Hitung DTW dan plot korespondensi

Kita dapat menentukan bahwa DTW antara bentuk gelombang hitam dan merah menunjukkan DTW yang lebih kecil dan lebih mirip (pada ukuran DTW) daripada bentuk gelombang biru.

# Menghitung DTW
distance_12, path_12 = fastdtw(data1, data2)
distance_13, path_13 = fastdtw(data1, data3)

# Hubungkan titik-titik yang sesuai dengan sebuah garis
plt.figure(figsize=(12, 4))
for x_12, x_13 in zip(path_12, path_13):
    plt.plot(x_12, [data1[x_12[0]], data2[x_12[1]]], color="r", linestyle="dotted")
    plt.plot(x_13, [data1[x_13[0]], data3[x_13[1]]], color="b", linestyle="dotted")

# Memplot Bentuk Gelombang
plt.plot(data1, label="data1", color="k")
plt.plot(data2, label="data2", color="r")
plt.plot(data3, label="data2", color="b")
plt.legend()
plt.title(
    f"DTW(data1, data2) {np.round(distance_12, 3)} < {np.round(distance_13, 3)} DTW(data1, data3)",
    fontsize=14,
)
plt.show()

png

Komentar

(Komentar akan muncul setelah disetujui)