本文是对2013年Rakthanmanon在ACM TKDD上发表的一篇论文"searching and mining trillions of time series subsequence under dynamic time warping"而作的阅读笔记,有疏漏、错误和不足指出, 请批评指正!
大部分时间序列分析任务都涉及到子序列间相似度的比较,涉及到子序列间最小距离的计算,其中一种较好的方法是DTW(欧氏距离也可以看作它的一种情况,就是点与点一一对应),但是直接DTW耗时长(复杂度通常是O(mn)),不能满足大规模数据(亿级)比对任务的耗时需求。基于此,文章作者在前人的基础上,给出了一系列方法去优化整个比对的计算过程,使其适用于大规模时间序列分析的相似度对比。
1、相关背景
1) 任务目标
对于一个十分长的序列
2) DTW 算法原理
简单来说就是允许子序列进行时间上的伸缩, 使序列上的点能在比对序列(Query)上找到最佳对应点, 具体介绍可参考链接: 理解dynamic time warping(DTW)的基本思想;
3) 下界剪枝(lower bounding pruning)
既然直接进行DTW计算十分耗时,那么我们可以找一个比较方便计算的距离,这个距离在严格意义上要小于DTW计算的距离,当然不能是0,0的话则起不到任何筛选的意义,然后对整个序列进行扫描,计算每个子序列与比对序列的距离(这里的距离是我们找的比较方便计算的距离),如果该距离大于到目前为止最小的距离,说明这个子序列与比对序列差距较大,不用继续比对;否则,该子序列作为候选序列,进一步计算DTW距离进行严格比较.
下界距离的选取有很多,这里主要介绍三种:
-
:如下图,计算的下界距离=起点距离+最大值距离+最小值距离+重点距离,此方法十分简单,但是这个下界距离与DTW的最终距离相差较远,这意味着在剪枝过程中仍存在大量序列无法去除,术语表示这个LB(lower bounding)不够tight.
-
:如下图,下界距离=一个序列多出另一个序列最大值的部分+一个序列多出另一个序列最小值的部分,图中的阴影面积所示.这个距离较上一个距离约束更强,所以更接近DTW距离,更tight,简直更多.
-
:如下图,它是在Query序列上设计了一个upper bounding和一个lower bounding(U和L),再加上一个global constraint,这个全局的限制实际上是在进行DTW计算时,最短路径轨迹的范围限制,可以看出这个下界距离已经比较接近两个序列之间的真实距离了,所以它的tight程度更高,剪枝效果也最好.
简而言之,通过下界距离剪枝,可以快速筛选掉差距较大的子序列,从而节省搜索时间.
2、正文详解
为了解决文章开始提到的问题,作者先总结了前任已有的一些优化工作.
1)已有的优化方法
i)用平方距离代替均方距离:
这个很好理解,原本是计算
ii)下界距离剪枝:
上文已提,用下界距离进行粗筛选,节省计算.
iii)Early Abandoning:
直译过来是提前放弃,意思是不管是在计算DTW或者下届距离时,按子序列从左往右计算,一旦有当前累计的距离和超过目前已知子序列最小的距离,那么就不用继续计算完整个子序列,直接抛弃,当前子序列肯定不是距离最小的.下面这幅图可以很形象的说明这一过程.
iiii)充分利用多核
2)新的优化方法(!!!!)
作者把他们的方法称为UCR suite.
i)序列归一化,再early abandoning:
为什么要归一化呢?作者做了对比实验,称经过归一化后的数据抗干扰能力更强.不必对整个序列一开始就进行归一化操作,在比对过程中,对子序列归一化,计算子序列的均值与方差,
m为子序列长度,X[i]表示子序列索引i的值.大致的思路是:同步计算两个求和ex,ex2,初始的和为第一个子序列(m个值)的,之后向右继续扫描,相当于滑动窗口右移一格,左边的第一个数据丢掉,加上右边新增的一个数据,更新新序列的均值与方差,然后计算距离,判断是否满足要求,是否剪枝.
ii)在early abandoning时重新排列计算:
啥意思呢?可以看个图:
左边序列是按照一般方法从左往右计算距离,看距离累加和是否超出已知最小距离,这样做可能需要更长的计算步骤,因为计算了较多较小的值.如果能像右边这样一开始就能计算差异较大的值,如果该子序列不满足条件,那么大部分情况下只需要计算较少步骤就能做出判断.可是如何知道差异较大的值在什么位置呢?可以这样考虑,对于这种有峰有谷的时间序列而言,如果两个序列接近,那么必然在峰谷的地方距离很小,反之,如果序列相差很远,峰谷一般也会相差较远(当然不是绝对的,大部分情况下都比较使用,尤其是归一化后的数据),因此我们可以把比对序列Q进行按值索引排序,从最大值的索引开始计算距离,依次递减,配合early abandoning,加快剪枝速度.
iii)对子序列使用下界距离
iiii)下界距离的级联使用:
- 首先使用LB_Kim下界距离,由于数据已经进行归一化操作,因此最大最小值的距离都为0,无需计算,只需对起始和终止点计算距离,复杂度为O(1);
- 使用LB_KeoghEQ下界距离,进一步剪枝,复杂度为O(n);
- 对于满足LB_KeoghEQ距离条件的子序列,进一步用LB_KeoghEC距离剪枝,复杂度也为O(n);
- 上面3个都满足的话,就计算DTW,同时利用early abandoning,计算过程中一旦出现距离和大于当前已知最小距离就停止计算并丢掉这个子序列,计算下一个,复杂度为O(nR).
以上就是整篇文章的核心思路,花费大量力气做剪枝处理(文中称剪枝率高达99.9999%),包括early abandoning,就是为了节省大量的计算时间,结果当然也是不错的,据作者称在相同数据集上比之前所有的相关算法耗时都短,并且在万亿级数据的比对中耗时也是可以接受的.
- Eamonn Keogh, Chotirat Ann Ratanamahatana, Exact indexing of dynamic time warping, Knowledge and Information Systems, 2005
- Thanawin Rakthanmanon et. al. Searching and Mining Trillions of Time Series Subsequences under Dynamic Time Warping, ACM TKDD, 2013