DTW算法Python实现
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实现相关推荐
- DTW 算法的实时语音识别——命令词识别(Python 实现)
介绍 这是我们计算机视听觉的第三个实验,也是本学期语音部分的最后一个实验,大概花了两天才写完.上个实验做的是语音编码问题,这个实验是语音识别的事,感觉处理语音还是比较有意思的. 附上实验代码地址:实验 ...
- DTW 笔记: Dynamic Time Warping 动态时间规整 (DTW的python实现) 【DDTW,WDTW】
0 总述 DTW可以计算两个时间序列的相似度,尤其适用于不同长度.不同节奏的时间序列(比如不同的人读同一个词的音频序列) DTW将自动扭曲(warping)时间序列(即在时间轴上进行局部的缩放),使得 ...
- 棋盘最短路径 python_Dijkstra 最短路径算法 Python 实现
Dijkstra 最短路径算法 Python 实现 问题描述 使用 Dijkstra 算法求图中的任意顶点到其它顶点的最短路径(求出需要经过那些点以及最短距离). 以下图为例: 算法思想 可以使用二维 ...
- 2021-03-15 数据挖掘算法—K-Means算法 Python版本
数据挖掘算法-K-Means算法 Python版本 简介 又叫K-均值算法,是非监督学习中的聚类算法. 基本思想 k-means算法比较简单.在k-means算法中,用cluster来表示簇:容易证明 ...
- 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用
粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...
- 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)
最优化算法python实现篇(4)--无约束多维极值(梯度下降法) 摘要 算法简介 注意事项 算法适用性 python实现 实例运行结果 算法过程可视化 摘要 本文介绍了多维无约束极值优化算法中的梯度 ...
- 最优化算法python实现篇(3)——无约束一维极值(黄金分割法)
最优化算法python实现篇(3)--无约束一维极值(黄金分割法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 ...
- 最优化算法python实现篇(2)—无约束一维极值(二分法)
最优化算法python实现篇(2)--无约束一维极值(二分法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 # ...
- 多元线性回归算法python实现_手写算法-Python代码推广多元线性回归
1.梯度下降-矩阵形式 上篇文章介绍了一元线性回归,包括Python实现和sklearn实现的实例.对比,以及一些问题点,详情可以看这里: 链接: 手写算法-Python代码实现一元线性回归 里面封装 ...
- 哈希运算python实现_一致性哈希算法 python实现
# -*- coding: utf-8 -*- """ 一致性哈希算法 python实现 参考 http://weblogs.java.net/blog/2007/11/ ...
最新文章
- 使用spring mail发送html邮件
- MAPGIS中输入分数和上下标格式的字符串。
- feign响应拦截_[Spring cloud 一步步实现广告系统] 11. 使用Feign实现微服务调用
- 人工智能--遗传算法(旅行商问题)
- Linux下载交通图片数据集CityScapes Dataset
- python爬虫专家_Python爬虫入门教程 27-100 微医挂号网专家团队数据抓取pyspider
- 第23天学习Java的笔记-抽象类
- Spring整合Mybatis之注解方式,(注解整合Junit)
- Ribbon服务器状态:ServerStats及其断路器原理
- Jsp Spring Security 权限管理系统
- oracle 数据库bak文件怎么打开,Oracle数据库的参数文件备份与恢复
- 解决Maven的jar包冲突问题
- BCD码干什么用的?
- 电力系统微型计算机继电保护试题,浙江省2008年7月高等教育自学考试电力系统微型计算机继电保护试题课程代码02313...
- 索尼微单连android手机软件,(收藏)如何将手机连接上SONY微单的WIFI进行遥控拍摄...
- Java中处理tiff文件
- PID控制的现象与本质
- PE头之IMAGE_FILE_HEADER解析
- “IP地址/24”是什么意思
- 什么是子域名?如何设置子域名解析?
热门文章
- 有了这6款浏览器插件,浏览器居然“活了”?!媳妇儿直呼“大开眼界”
- APP通用测试用例编写
- AD7124的调试总结
- [中奖]第九届“泰迪杯”挑战赛A题
- 完美抠图王冰冰!字节实习生实现4K60帧视频实时抠图,连头发丝都根根分明!...
- php 和 java 美刀,通过GOOGLE(谷歌) API获取实时货币汇率(人民币和美金)的PHP代码
- excel更新计算机,2007版Excel升级新版本的方法步骤
- 计算机基础知识ppt操作题,计算机一级ppt操作题
- 毕设-基于SpringBoot度假村租房管理系统
- Java基础——集合List+Set+泛型+Map