本文地址为:http://www.cnblogs.com/kemaswill/,作者联系方式为kemaswill@163.com,转载请注明出处。

关于DTW算法的简介请见我的上一篇博客:时间序列挖掘-动态时间归整算法原理和实现。

DTW采用动态规划来计算两个时间序列之间的相似性,算法复杂度为O(N2)。当两个时间序列都比较长时,DTW算法效率比较慢,不能满足需求,为此,有许多对DTW进行加速的算法:FastDTW,SparseDTW,LB_Keogh,LB_Improved等。在这里我们介绍FastDTW。

1. 标准DTW算法

在DTW中,我们要寻找的是一个归整路径(详见时间序列挖掘-动态时间归整算法原理和实现),如下图所示:

最终我们想要得到的是这条路径经过的所有点的坐标(i,j)对应的X和Y两个时间序列的点Xi和Yj的距离(比如欧几里得距离)之和,亦即我们需要求得代价矩阵最右上角的元素D(i,j)。而根据动态规划的思想:

要求得D(i,j)必须要知道D(i-1,j), D(i-1,j-1), D(i,j-1)等,以此类推,我们需要求得整个D矩阵,才能得到最终的D(i,j),亦即算法的时间复杂度为O(N2)。

2. DTW常用加速手段

常用的DTW加速手段有:

(1). 限制。亦即减少D的搜索空间,下图中阴影部分为实际的探索空间,空白的部分不进行探索。

(2). 数据抽象。亦即把之前长度为N的时间序列规约成长度为M(M

(3). 索引。索引是在进行分类和聚类时减少需要运行的DTW的次数的方法,并不能加速一次的DTW计算。

3. FastDTW

FastDTW综合使用限制和数据抽象两种方法来加速DTW的计算,主要分为三个步骤:

(1). 粗粒度化。亦即首先对原始的时间序列进行数据抽象,数据抽象可以迭代执行多次1/1->1/2->1/4->1/16,粗粒度数据点是其对应的多个细粒度数据点的平均值。

(2). 投影。在较粗粒度上对时间序列运行DTW算法。

(3). 细粒度化。将在较粗粒度上得到的归整路径经过的方格进一步细粒度化到较细粒度的时间序列上。除了进行细粒度化之外,我们还额外的在较细粒度的空间内额外向外(横向,竖向,斜向)扩展K个粒度,K为半径参数,一般取为1或者2.

FastDTW算法的具体执行流程如下图所示:

第一个图表示在较粗粒度空间(1/8)内执行DTW算法。第二个图表示将较粗粒度空间(1/8)内求得的归整路径经过的方格细粒度化,并且向外(横向,竖向,斜向)扩展一个(由半径参数确定)细粒度单位后,再执行DTW得到的归整路径。第三个图和第四个图也是这样。

由于采取了减少搜索空间的策略,FastDTW并不一定能够求得准确的DTW距离,但是FastDTW算法的时间复杂度比较低,为O(N)。

参考文献:

[1]. FastDTW: Toward Accurate Dynamic Time Warping in Linear Time and Space.Stan Salvador, Philip Chan.

java dtw_时间序列挖掘-DTW加速算法FastDTW简介相关推荐

  1. 时间序列挖掘-DTW加速算法FastDTW简介

    本文地址为:http://www.cnblogs.com/kemaswill/,作者联系方式为kemaswill@163.com,转载请注明出处. 关于DTW算法的简介请见我的上一篇博客:时间序列挖掘 ...

  2. java三次指数平滑_时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)

    所有移动平均法都存在很多问题. 它们都太难计算了.每个点的计算都让你绞尽脑汁.而且也不能通过之前的计算结果推算出加权移动平均值. 移动平均值永远不可能应用于现有的数据集边缘的数据,因为它们的窗口宽度是 ...

  3. 【GNN】谷歌、阿里、腾讯等在大规模图神经网络上必用的GNN加速算法

    点击上方,选择星标或置顶,每天给你送上干货 作者 | 对白 出品 | 对白的算法屋 今天我们来聊一聊在大规模图神经网络上必用的GNN加速算法.GNN在图结构的任务上取得了很好的结果,但由于需要将图加载 ...

  4. java青蛙过河打字_趣味算法——青蛙过河(JAVA)

    青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...

  5. Nesterov加速算法

    Nesterov加速算法 上一届分析了近似点梯度法的收敛速度:如果光华部分的梯度是利普西茨连续的,则目标函数的收敛速度可以达到O1kO{\frac{1}{k}}Ok1​,一个自然的问题是如果仅用梯度信 ...

  6. java数据挖掘算法_[转载]干货,基于Java和C++的数据挖掘Apriori算法实现

    Apriori算法实现 Apriori算法的思想还是很容易理解的,实现起来虽然麻烦,但是还是比较容易的.下面是我使用Java语言实现的Apriori算法,实现了AprioriAlgorithm 类,包 ...

  7. java快排算法解读,java 快排的思路与算法

    java 快排的思路与算法 有时候面试的时候的会问道Arrays.sort()是怎么实现的,我以前根本不知道是什么东西,最近点进去看了一下.直接吓傻, //看到这个时候还是比较淡定的,可怕的事情来了. ...

  8. java常用的7大排序算法汇总

    这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经 ...

  9. 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测大气压( air pressure)+代码实战

    深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测大气压( air pressure)+代码实战 长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主 ...

最新文章

  1. 服务器推送信息到客户端,服务器如何发送消息到客户端
  2. shell预定义变量
  3. 《Java 核心技术卷1 第10版》学习笔记------ -理解方法调用【重载解析、静态绑定、动态绑定】
  4. 月入过万?就靠SEO了
  5. UILabel常用属性
  6. CCF201509-2 日期计算
  7. SQL Server中 char与varchar
  8. Java获取网络IP
  9. Linux 错误: $'\r': command not found错误解决
  10. python读取手机通讯录_python爬取通讯录
  11. dy极速版-艳云脚本云控系统
  12. 基于 WebRTC 创建一款多人联机游戏
  13. Dfam:真核生物转座元件数据库
  14. [AlwaysOn] 创建SQL Server高可用性组T-SQL语法:SEEDING_MODE参数
  15. c++中怎么求二维数组的长度
  16. exp备份oracle报错1455,EXP-00008 遇到 ORACLE 错误 1455
  17. P2P 应用程序框架
  18. android 记住多个账号,Android实现记住账号密码功能
  19. python中file是什么意思_python文件file
  20. 深度学习(五)优化算法--提高神经网络的训练速度和精度

热门文章

  1. pickle.dumps()和pickle.loads()
  2. 教你几个规避offer、三方和劳动合同违约金的方法
  3. java中构造方法的特征及其作用
  4. 雾帜智能入选《2021中国网络安全产业势能榜》
  5. Cesium逼真水面,动态水波,倒影
  6. 动态人脸识别系统服务器,大华股份DH-IVS-F7300 动态人脸识别服务器
  7. 中国惠普前总裁 孙振耀的毕生经验之谈
  8. 一个计算机项目的收获心得体会
  9. 润乾报表日志文件的配置方法
  10. Excel中计算平方和的技巧