本文是基于对 《Searching and Mining Trillions of Time Series Subsequences under Dynamic Time Warping》的理解和总结。论文地址。
1.前言
大多数针对时序的数据挖掘算法使用序列的相似度作为核心,因此这部分算法的时间复杂度会极大的影响整体算法的效率。然而大部分论文仅针对百万级的数据进行挖掘,并不能满足业界对于可以高效处理亿级数据的需求。本文着重介绍了几个针对DTW算法的优化,使得复杂度明显下降。
2.概念和假设
在进行详细的论述之前,本文先介绍了部分基本概念以及算法所基于的假设。
2.1 序列查询
假设有一个序列
2.2 DTW
Dynamic Time Wrap(DTW) 是一个用来计算两段时间序列相似度的算法。与传统的仅仅计算相同位置上元素的欧式距离的方法不同,DTW允许 one-to-many 映射。也就是说对于一个输入序列Q, 其中的每一个元素可以被映射到另一个序列C的同一位置, 反之也成立。但是要保证序列的单调性。 假设
因此DTW功能就是寻找到一个可以最小化欧式距离的映射。DTW一般是通过动态规划来实现,具体实现可以参照这里。时间复杂度为
![cf28a67e97b56f197a2f265db4e2fd5a.png](https://i-blog.csdnimg.cn/blog_migrate/a1dd6b07a7ad6436c818258ef52aeb1c.jpeg)
2.3 假设
2.3.1 所有的时间子序列都必须被normalize
文章在这里着重强调了这部分的重要性。从文章中可以看出如果时间序列没有经过normalization的处理,其抗噪性是很差的。而且文章也提出,对于每一段子序列,在比较前都要经过normalization 的处理,这样才能产生最好的结果。仅仅对整个数据集做normalization是不够的。
2.3.2 DTW是最好的metric
从上图可以看出DTW确实比naive 欧式距离要合理。
2.3.3 如果查询长度不确定那么就无法做index
做index确实可以提高查询速度,但是在实际情况下,如果不知道查询序列的长度, 那么就需要建立很多不同长度的index来应对不同长度的query。而这个index所需要的存储空间正比于数据集的大小,所以对于兆级数据来说并不现实(我感觉这个假设不太make sense)。主要还是为了说明现在的方法是最优解。
3 已知的优化方法
3.1 在计算距离时去掉平方根
因位这个算法的目的是找出距离最短的子序列,并且所用的metric是欧式距离,所以去除平方根并不会影响不同子序列之间的排名关系。
3.2 lower bounding
对于很大的序列,一个常见的优化方法就是通过建立lower bound来剪枝。文章介绍了两种lower bound:
![b717504ce6b50e08c3b6ebe5142187b6.png](https://i-blog.csdnimg.cn/blog_migrate/846030ec823b2494a5682b6131d62a5d.jpeg)
3.3 Early abandoning of ED and
在计算序列的欧式距离或者
3.4 Early abandoning of DTW
在计算DTW的时候,由于DTW是从左向右计算的,所以可以通过计算已有的DTW距离加上从当前位置向后的
当这个距离大于最佳距离时剪枝。这里的前提条件是已经计算过
![d4519cabe82020c7de5cf9b53c8d6af4.png](https://i-blog.csdnimg.cn/blog_migrate/7cd37181c3aac240c50b88923ac15e0a.jpeg)
4 UCR
4.1 Early abandoning Z-normalization
这一部分是基于之前每个子序列都要normalization的假设。实际上normalization是可以和计算ED合并在一起的,这样在对
![8202f170a77ab1daa75cd637f23c62e6.png](https://i-blog.csdnimg.cn/blog_migrate/252e9d122126219ecbbfc8fdb71ba109.jpeg)
具体实现方法如下:
为了对子序列做normalization,需要计算两个参数:
![f6aa28f3ad0d52bc9e328bab0ba46b08.png](https://i-blog.csdnimg.cn/blog_migrate/2288354995d73e7f0764b1c9e5a5e5da.png)
为了减少这两个参数所需的计算量,文章使用了circular buffer。 在计算这两个参数时使用累积的
4.2 Reordering Early Abandoning
在对ED做剪枝的时候,单纯的从左向右并不一定能够最快的达到剪枝的目的。
![af9a481f4d47762cae75f1380a168ede.png](https://i-blog.csdnimg.cn/blog_migrate/6d0a7d1ad7407c507260974dc7a6a5a1.jpeg)
如图所示,经过重新排序后右边只需要做5次计算就可以完成剪枝但是左边却需要9次。这里同样是基于之前的假设,由于文章采用的是 Z-normalization, 那么查询序列Q的每一个值都会用来和很多目标序列的值
4.3 Reverse the Query/Data Role in
之前提到在建立
![4076ca4de9272b584f98653d445aa4dc.png](https://i-blog.csdnimg.cn/blog_migrate/264cf0198fff47150eb4d230b911747b.jpeg)
4.4 Cascading Lower Bounds
在针对DTW优化时,由于有多个LB可以选择,可以先选择剪枝能力差但是计算迅速的LB如下图所示。依次渐进至剪枝能力更强但是计算复杂度更高的方法来提高剪枝效率。
![a0485a24cb9a5df7c9628dfb879a2eb9.png](https://i-blog.csdnimg.cn/blog_migrate/de3c22017c114edb6849816f4acb63b8.jpeg)
5.0 实验结果
论文对比了其他几种查询算法。
naive:单纯计算Z-normaliztion 之后的欧式距离
state-of-the-art: 计算Z-normaliztion, 并使用 section3 中介绍的early abandoning。
从论文中可以看到ucr在多个数据集上都极大的提高了运算速度。并且在处理极长的子序列(72500)与目标序列(3billion)时能将时间从35天缩短至15小时。具体实验细节参考这里。
![9794433172b5761298dbc2cef37b37de.png](https://i-blog.csdnimg.cn/blog_migrate/305c89c53e53ea7465d7f644972be265.jpeg)
6.0 结论
总的来说这篇文章是针对序列查询算法的几个部位进行优化,最为出彩的部分就是关于最佳排序的假设。但是有些不足的就是没有提供每个优化对于剪枝效率的影响。不过总体来说这篇论文还是有着很广泛的应用场景,尤其是生物这种经常要做DNA序列查找的领域,这个方法可以极大的提高实验效率,难道21世纪真的是生物的世纪 ?