原文地址:https://blog.csdn.net/qcyfred/article/details/53824507
https://zhuanlan.zhihu.com/p/43247215

动态时间规整(DTW)算法简介

相忘天涯,深藏于心
19 人赞同了该文章

DTW最初用于识别语音的相似性。我们用数字表示音调高低,例如某个单词发音的音调为1-3-2-4。现在有两个人说这个单词,一个人在前半部分拖长,其发音为1-1-3-3-2-4;另一个人在后半部分拖长,其发音为1-3-2-2-4-4。


现在要计算1-1-3-3-2-4和1-3-2-2-4-4两个序列的距离(距离越小,相似度越高)。因为两个序列代表同一个单词,我们希望算出的距离越小越好,这样把两个序列识别为同一单词的概率就越大。

先用传统方法计算两个序列的欧几里得距离,即计算两个序列各个对应的点之间的距离之和。

距离之和
= |A(1)-B(1)| + |A(2)-B(2)| + |A(3)-B(3)| + |A(4)-B(4)| + |A(5)-B(5)| + |A(6)-B(6)|
= |1-1| + |1-3| + |3-2| + |3-2| + |2-4| + |4-4|
= 6


如果我们允许序列的点与另一序列的多个连续的点相对应(相当于把这个点所代表的音调的发音时间延长),然后再计算对应点之间的距离之和。如下图:B(1)与A(1)、A(2)相对应,B(2)与A(3)、A(4)相对应,A(5)与B(3)、B(4)相对应,A(6)与B(5)、B(6)相对应。


这样的话,

距离之和
= |A(1)-B(1)| + |A(2)-B(1)| + |A(3)-B(2)| + |A(4)-B(2)| + |A(5)-B(3)| + |A(5)-B(4)| + |A(6)-B(5)| + |A(6)-B(6)|
= |1-1| + |1-1| + |3-3| + |3-3| + |2-2| + |2-2| + |4-4| + |4-4|
= 0

我们把这种“可以把序列某个时刻的点跟另一时刻多个连续时刻的点相对应”的做法称为时间规整(Time Warping)。

现在我们用一个6*6矩阵M表示序列A(1-1-3-3-2-4)和序列B(1-3-2-2-4-4)各个点之间的距离,M(i, j)等于A的第i个点和B的第j个点之间的距离,即


我们看到传统欧几里得距离里对应的点:

  • A(1)-B(1)
  • A(2)-B(2)
  • A(3)-B(3)
  • A(4)-B(4)
  • A(5)-B(5)
  • A(6)-B(6)

它们正好构成了对角线,对角线上元素和为6。

时间规整的方法里,对应的点为:

  • A(1)A(2)-B(1)
  • A(3)A(4)-B(2)
  • A(5)-B(3)B(4)
  • A(6)-B(5)B(6)

这些点构成了从左上角到右下角的另一条路径,路径上的元素和为0。

因此,DTW算法的步骤为:

  1. 计算两个序列各个点之间的距离矩阵。
  2. 寻找一条从矩阵左上角到右下角的路径,使得路径上的元素和最小。

我们称路径上的元素和为路径长度。那么如何寻找长度最小的路径呢?

矩阵从左上角到右下角的路径长度有以下性质:

  1. 当前路径长度 = 前一步的路径长度 + 当前元素的大小
  2. 路径上的某个元素(i, j),它的前一个元素只可能为以下三者之一:

a) 左边的相邻元素 (i, j-1)
b) 上面的相邻元素 (i-1, j)
c) 左上方的相邻元素 (i-1, j-1)

假设矩阵为M,从矩阵左上角(1,1)到任一点(i, j)的最短路径长度为Lmin(i, j)。那么可以用递归算法求最短路径长度:

起始条件:

递推规则:

递推规则这样写的原因是因为当前元素的最短路径必然是从前一个元素的最短路径的长度加上当前元素的值。前一个元素有三个可能,我们取三个可能之中路径最短的那个即可。

编辑于 2018-08-29
算法
时间序列分析

​赞同 19​​5 条评论

​分享

​收藏


http://www.taodudu.cc/news/show-1069915.html

相关文章:

  • 垃圾分类智能化-垃圾分类机器人
  • 数据结构中基本查找算法总结
  • 平衡二叉树、二叉排序树-数据结构
  • 网易2018
  • 玩转算法面试-第四章查找值之leetcod相关笔记
  • 商汤科技-数据运维工程师-提前批笔试题目汇总
  • 玩转二算法课的笔记-第一章
  • 玩转算法面试-第二章
  • 玩转算法面试-第三章
  • 玩转算法值面试-第五章 -在链表中穿针引线
  • 玩转算法之面试-第六章(栈和队列)
  • 京东2020算法工程师0824笔试题整理
  • 商汤科技2020数据分析师0820笔试题目整理
  • 快手 算法工程师 0825 笔试题
  • 玩转算法第七章-二叉树与递归
  • 玩转算法之面试 第八章-递归与回溯
  • 玩转算法之面试第九章-动态规划
  • freewheel现场宣讲笔试回忆篇
  • 玩转算法之面试第十章-贪心算法
  • 常见的算法面试问题以及代码实现
  • 银行技术类2020校园招聘笔试
  • 常见的面试题整理 -python
  • 机器学习(Machine Learning)、深度学习(Deep Learning)、NLP面试中常考到的知识点和代码实现
  • AutoPep8-----Pycharm自动排版工具
  • python中模块、函数与各个模块之间的调用
  • 一个完整的算法开发
  • 创建python的虚拟环境(图文教程),并使用。
  • requirements.txt一键安装项目所需要的的python包
  • python杂谈
  • 爬取词库,使用jieba分词库,自定义dict.txt文件+将搜狗词库.scel文件为.txt文件

DTW动态时间规整算法相关推荐

  1. 初识DTW(动态时间规整)算法及Python实现例

    目录 1. 概要 2. 时序列相似度度量 3. DTW基本算法 4. Python实现 5. Next Action 1. 概要 DTW( Dynamic Time Warping,动态时间规整)是基 ...

  2. java dtw,DTW动态时间规整算法

    [TOC] 1.基本介绍 DTW:Dynamic Time Warping,即动态时间归整.DTW算法基于DP动态规划思想,解决了发音长短不一的模板匹配问题,常用于语音识别(孤立词识别). HMM算法 ...

  3. c语言模拟实现DTW(动态时间规整算法)

    关于DTW算法的原理这篇博客写的很好https://blog.csdn.net/aa8568849/article/details/53841189?utm_medium=distribute.pc_ ...

  4. 动态时间规整算法(DTW)通俗易懂

    动态时间规整算法(Dynamic Time Warping ) 来源: -假定一个孤立词识别系统,利用模板匹配法进行识别.训练阶段,用户将词汇表种每一个词都念一遍,将其特征矢量的时间序列作为模板(te ...

  5. 基于动态时间规整算法(DTW)的语音识别技术研究-含Matlab代码

    ⭕⭕ 目 录 ⭕⭕ ⏩ 一.引言 ⏩ 二.动态时间规整算法基本原理 ⏩ 三.语音识别实例分析 ⏩ 四.参考文献 ⏩ 五.Matlab代码获取 ⏩ 一.引言 在语音识别技术的发展过程中,动态时间规整算法 ...

  6. 动态时间规整算法: 从DTW到FastDTW

    目录 动态时间规整算法: 从DTW到FastDTW 总结: 简介[^1] DTW[^1] FastDTW:使用多级粗化的方法[^1] 结果 动态时间规整算法: 从DTW到FastDTW 总结: Fas ...

  7. 动态时间规整算法——DTW

    没有做过机器学习的小伙伴们对这个算法应该不是特别的了解,因为机器学习经常会用到这个算法.再将这个算法之前,我们先看一下初中的知识点. 欧几里得距离 在讲解动态时间规整算法(Dynamic Time W ...

  8. 动态时间规整算法DTW

    动态时间规整算法(dynamic time warping,DTW),最早由日本学者Itakura提出,用于衡量两个时间序列的相似度,也可用于将多个测试序列与标准序列对齐,从而实现序列长度的归一化. ...

  9. 动态时间规整算法(Dynamic Time Warping, DTW)之初探单词语音识别

    动态时间规整算法(DTW)是最近接触的一种提取时间序列模板方法.本文主要是一些自己的学习记录,并适当地加入自己的理解.若有见解不一致之处,欢迎交流. 1 动态时间规整(DTW)基本思想 先从单词语音时 ...

最新文章

  1. APP如何保存数据?——iOS保存数据的4种方式
  2. python外星人入侵游戏代码大全-Python游戏:外星人入侵游戏编程完整版!内附代码...
  3. 一个机器周期 计算机_计算机科学组织| 机器周期
  4. oracle model 分组,【已解决】关于Oracle分组函数高级用法(按照N条分组并生成唯一号)...
  5. MetaMask以太坊钱包插件
  6. 设计模式学习笔记——工厂(Factory)模式
  7. 分区函数Partition By的与row_number()的用法以及与排序rank()的用法详解(获取分组(分区)中前几条记录)...
  8. CentOS 7 + Win 双系统的安装遇到的重要问题
  9. C语言之选择结构与循环结构
  10. zebradesigner2教程_ZebraDesigner pro 2免费版
  11. 组装计算机主机算固定资产吗,​购买电脑配件组装电脑属于固定资产吗
  12. 如何判断长上影线是洗盘还是主力出货?
  13. Marvell宣战博通网络交换芯片,一大波饿狼扑食而来
  14. 基于JAVA图书借阅系统的设计与实现计算机毕业设计源码+系统+lw文档+部署
  15. 【读书笔记】——【学习之道】《如何学习:用更短的时间达到更加效果和更好成绩》
  16. 今日份安利:视频变声的软件有哪些?
  17. Java开发入门教程!java开发架构师职责
  18. Swing学习----------QQ登录界面制作(一)
  19. java单例模式_无名小仙男
  20. 2022年意识科学十大主题焦点与研究进展

热门文章

  1. C++中string.find()的误用
  2. Linux 终端(TTY)
  3. 极简的 PNG 编码函数 svpng(),用来学习C语言,真的很爽
  4. 我在深圳,但是家里托人在老家找了一份工作
  5. 学习网站(不断更新)
  6. mysql数据库中_截取数据_mysql数据库的字符串截取方法
  7. html如何实现切换效果,纯CSS实现页签切换效果
  8. android v4包自动导入吧,android如何导入v4包的源码
  9. python自由落体_VPython - example - 模拟自由落体运动
  10. vue-cli4.x 中 配置允许跨域请求