DTW算法可以用来衡量两个时间序列的相似性,而且两个时间序列的长度可以不必相等。

DTW算法原理

如图1所示,图中矩阵$dij$表示时间序列$A$时刻$i$和时间序列$B$时刻$j$的距离,DTW算法就是要从$(1,1)$到$(m,n)$找到一条路径使得累计$dij$最小。

图1:DTW算法示意图,r表示warping window,红色圆点表示累计距离最小的路径。

如何找到这条路径呢,我们这里采用动态规划算法。假设我们要求到位置$(i,j)$的最小累计距离$D(i,j)$,那么它只能由$D(i-1,j)$,$D(i,j-1)$和$D(i,j)$这三个位置的最小累计距离中寻找,也就是$D(i,j)=dij+min[D(i-1,j),D(i,j-1),D(i,j)]$。如图2所示,最优路径只能从三个临近位置寻找。最终,$D(m,n)$越小,表示两个时间序列间的相似性越高。

图2:动态规划算法寻找最小累计距离路径的三种可能

DTW算法的Python实现

def dtw_distance(ts_a, ts_b, d=lambda x,y: abs(x-y), mww=10000):"""Computes dtw distance between two time seriesArgs:ts_a: time series ats_b: time series bd: distance functionmww: max warping window, int, optional (default = infinity)Returns:dtw distance"""# Create cost matrix via broadcasting with large intts_a, ts_b = np.array(ts_a), np.array(ts_b)M, N = len(ts_a), len(ts_b)cost = np.ones((M, N))# Initialize the first row and columncost[0, 0] = d(ts_a[0], ts_b[0])for i in range(1, M):cost[i, 0] = cost[i-1, 0] + d(ts_a[i], ts_b[0])for j in range(1, N):cost[0, j] = cost[0, j-1] + d(ts_a[0], ts_b[j])# Populate rest of cost matrix within windowfor i in range(1, M):for j in range(max(1, i - mww), min(N, i + mww)):choices = cost[i-1, j-1], cost[i, j-1], cost[i-1, j]cost[i, j] = min(choices) + d(ts_a[i], ts_b[j])# Return DTW distance given window return cost[-1, -1]

转载于:https://www.cnblogs.com/ningjing213/p/10502519.html

DTW算法Python实现相关推荐

  1. DTW 算法的实时语音识别——命令词识别(Python 实现)

    介绍 这是我们计算机视听觉的第三个实验,也是本学期语音部分的最后一个实验,大概花了两天才写完.上个实验做的是语音编码问题,这个实验是语音识别的事,感觉处理语音还是比较有意思的. 附上实验代码地址:实验 ...

  2. DTW 笔记: Dynamic Time Warping 动态时间规整 (DTW的python实现) 【DDTW,WDTW】

    0 总述 DTW可以计算两个时间序列的相似度,尤其适用于不同长度.不同节奏的时间序列(比如不同的人读同一个词的音频序列) DTW将自动扭曲(warping)时间序列(即在时间轴上进行局部的缩放),使得 ...

  3. 棋盘最短路径 python_Dijkstra 最短路径算法 Python 实现

    Dijkstra 最短路径算法 Python 实现 问题描述 使用 Dijkstra 算法求图中的任意顶点到其它顶点的最短路径(求出需要经过那些点以及最短距离). 以下图为例: 算法思想 可以使用二维 ...

  4. 2021-03-15 数据挖掘算法—K-Means算法 Python版本

    数据挖掘算法-K-Means算法 Python版本 简介 又叫K-均值算法,是非监督学习中的聚类算法. 基本思想 k-means算法比较简单.在k-means算法中,用cluster来表示簇:容易证明 ...

  5. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用

    粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...

  6. 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)

    最优化算法python实现篇(4)--无约束多维极值(梯度下降法) 摘要 算法简介 注意事项 算法适用性 python实现 实例运行结果 算法过程可视化 摘要 本文介绍了多维无约束极值优化算法中的梯度 ...

  7. 最优化算法python实现篇(3)——无约束一维极值(黄金分割法)

    最优化算法python实现篇(3)--无约束一维极值(黄金分割法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 ...

  8. 最优化算法python实现篇(2)—无约束一维极值(二分法)

    最优化算法python实现篇(2)--无约束一维极值(二分法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 # ...

  9. 多元线性回归算法python实现_手写算法-Python代码推广多元线性回归

    1.梯度下降-矩阵形式 上篇文章介绍了一元线性回归,包括Python实现和sklearn实现的实例.对比,以及一些问题点,详情可以看这里: 链接: 手写算法-Python代码实现一元线性回归 里面封装 ...

  10. 哈希运算python实现_一致性哈希算法 python实现

    # -*- coding: utf-8 -*- """ 一致性哈希算法 python实现 参考 http://weblogs.java.net/blog/2007/11/ ...

最新文章

  1. 使用spring mail发送html邮件
  2. MAPGIS中输入分数和上下标格式的字符串。
  3. feign响应拦截_[Spring cloud 一步步实现广告系统] 11. 使用Feign实现微服务调用
  4. 人工智能--遗传算法(旅行商问题)
  5. Linux下载交通图片数据集CityScapes Dataset
  6. python爬虫专家_Python爬虫入门教程 27-100 微医挂号网专家团队数据抓取pyspider
  7. 第23天学习Java的笔记-抽象类
  8. Spring整合Mybatis之注解方式,(注解整合Junit)
  9. Ribbon服务器状态:ServerStats及其断路器原理
  10. Jsp Spring Security 权限管理系统
  11. oracle 数据库bak文件怎么打开,Oracle数据库的参数文件备份与恢复
  12. 解决Maven的jar包冲突问题
  13. BCD码干什么用的?
  14. 电力系统微型计算机继电保护试题,浙江省2008年7月高等教育自学考试电力系统微型计算机继电保护试题课程代码02313...
  15. 索尼微单连android手机软件,(收藏)如何将手机连接上SONY微单的WIFI进行遥控拍摄...
  16. Java中处理tiff文件
  17. PID控制的现象与本质
  18. PE头之IMAGE_FILE_HEADER解析
  19. “IP地址/24”是什么意思
  20. 什么是子域名?如何设置子域名解析?

热门文章

  1. 有了这6款浏览器插件,浏览器居然“活了”?!媳妇儿直呼“大开眼界”
  2. APP通用测试用例编写
  3. AD7124的调试总结
  4. [中奖]第九届“泰迪杯”挑战赛A题
  5. 完美抠图王冰冰!字节实习生实现4K60帧视频实时抠图,连头发丝都根根分明!...
  6. php 和 java 美刀,通过GOOGLE(谷歌) API获取实时货币汇率(人民币和美金)的PHP代码
  7. excel更新计算机,2007版Excel升级新版本的方法步骤
  8. 计算机基础知识ppt操作题,计算机一级ppt操作题
  9. 毕设-基于SpringBoot度假村租房管理系统
  10. Java基础——集合List+Set+泛型+Map