DTW(Dynamic Time Warping) 是一种序列匹配和序列距离计算的经典算法。DTW的适用范围极其广泛, 语音识别,搜索引擎,基因组数据分析等都有DTW的身影。 自从1994年DTW算法最先被报道出来以来, 各种围绕DTW的性能和准确性优化层出不穷。 本文将对一个2012年发表的DTW性能优化算法进行解读,介绍DTW的性能优化过程。
参考文献:
Searching and Mining Trillions of Time Series Subsequences under Dynamic Time Warping Thanawindl.acm.org一、DTW算法回顾
DTW出现之前对于序列相似度测测量主要基于ED(Euclidean Distance)但是ED距离对于序列来说会有很多问题,比如每一个时间步不能很好对齐, 或者序列长短不一等等。 DTW出现以后在很多场景逐步取代ED的位置, 但DTW有一个很大的缺陷,就是算的慢算法复杂度位
而ED只有
。 随后的一系列研究成果都是围绕如何加快DTW的速度展开,比如寻找更好的 LB(low bound), 创建更好的 index 简化计算, 使用部分计算代替全部计算的 early abandon 方法等等。 这些都会在后文中详细说明。 不过在这之前先回顾一下到底什么是DTW算法。
简单对比一下ED和DTW算法, 示意图如下:
左边是ED算法, 只能解决时间步万全匹配的距离计算。
右面是DTW算法, 可以存在时间步骤之间多对一的情况。 很显然对于复杂序列,DTW更靠谱。
DTW算法定义如下,假设我们有两条序列 Q(query)和 C (candidates), 分别长度为
和
,他们不一定相等。
为了比对Q和C,组成一个n by m的矩阵, 每两个对齐后的元素之间的距离下标定义为