반응형
DTW
- Dynamic time wraping(동적 시간 워핑)은 다른 속도, 움직임을 가진 서로 다른 신호의 시간축에 대한 파장의 유사성을 측정하는 알고리즘
- 그래픽, 비디오, 오디오 분야에서 자주 사용되며 의료분야에서 보행 유사성, 생체신호 분석 등에 자주 사용되기도 한다. 특히 자동 음성 인식기술 분야에서 가장 두각을 나타내는 알고리즘
I. DTW 의 특징과 개념
1. 일반적인 시계열 신호의 비교
- 일반적으로 시계열 신호간 유사성을 따질 때 유클리드 거리(Euclidean distance)를 이용 (각각 시간별 신호 간 MSE를 이용)
장점
- 계산이 용이
- 연산속도가 뛰어남
단점
- 신호의 떨림과 움직임이 심해질수록 결과가 어긋나는 현상 발생
- 길이가 다른 시계열 분석 불가
2. DTW를 이용한 시계열 신호 비교
- 동일한 시간선상의 데이터 뿐 아니라 주변 요소까지 비교쌍으로 사용하여 정확도를 높히는 방식으로 사진과 같이 최상단 끝 - 최하단 끝까지 이동할 때 가장 낮은 합계를 찾아냄
- 따라서 dtw distance 값이 낮을수록 유사도가 높음
장점
- 서로 다른 길이의 시계열의 유사도 분석이 가능
- GPS 데이터 등 다차원 시계열 데이터의 분석 가능
단점
- 알고리즘 구현이 어렵고 연산량이 많음
II. DTW in Python
- DTW를 수행하기 위한 파이썬 패키지 제공 dtw-python : https://pypi.org/project/dtw-python/
- R의 DTW 라이브러리 개발자가 파이썬에 맞춰 개발한 패키지
1. 사용법
pip install dtw-python
으로 설치 후 import dtw
로 사용
2. 사용예시
import numpy as np
import dtw
idx = np.linspace(0,6.28,num=100)
query = np.sin(idx) + np.random.uniform(size=100)/10.0
query2 = np.sin(idx) + np.random.uniform(size=100)/10.0
dtw.dtw(query, query2, keep_internals=True).plot(type="twoway")
>>> dtw.dtw(query, query2, keep_internals=True).distance
7.8983182873739874
동일한 길이와 파장의 형태의 유사도를 위와 같이 비교할 수 있다.
import numpy as np
import dtw
idx = np.linspace(0,6.28,num=100)
idx2 = np.linspace(0,7.28,num=200)
query = np.sin(idx) + np.random.uniform(size=100)/10.0
query2 = np.sin(idx2) + np.random.uniform(size=200)/10.0
>>> dtw.dtw(query, query2, keep_internals=True).distance
19.127911885547793
DTW 알고리즘은 다른 길이의 신호간 유사도를 비교할 수 도 있다.
이때, 임의로 두 신호의 길이를 동일하게 만들어(padding 등) 비교할 수 도 있고, 예시와 같이 직접 비교할 수 있다.
III. 관련 자료
- Generalizing Dynamic Time Warping to the MultiDimensional Case Requires an Adaptive Approach.Mohammad Shokoohi-Yekta, Bing Hu, Hongxia Jin, Jun Wang, Eamonn Keogh. SDM 2015
- Using time-series similarity measures to compare animal movement trajectories in ecology. Ian R. Cleasby & Ewan D. Wakefield & Barbara J. Morrissey & Thomas W. Bodey & Steven C. Votier & Stuart Bearhop & Keith C. Hamer. Behavioral Ecology and Sociobiology(2019) 73. p.151
- https://www.youtube.com/watch?v=_K1OsqCicBY
- DTW-python
반응형