“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,点击查看活动详情”
不懂就查系列是基于兴趣的系列
起因是小小的强迫症,看到不懂的东西喜欢去给自己解惑
本文内容是基于网络平台提供的知识点,感谢互联网和那些愿意分享知识的大佬们
希望能坚持下去
问题的起因
学习过程中看到的一个算法,肤浅地看了一下互联网上的内容,觉得并不够,于是决定再去了解更多。
DTW(Dynamic Time Warping)算法
中文翻译为动态时间规整算法,是对长度不一的时间序列进行比较,从而衡量其相似度,主要应用于语音识别中的孤音识别,姿态估计中的动作识别,数据挖掘和信息检索中。
那么时间序列是什么呢? 时间序列是按照一定的时间间隔排列的一组数据,其时间间隔可以是任意的时间单位,如秒,小时,一天等。比如:一段朗诵的语音、一组相同的动作、最近几天的天气等,这些数据形成了以一定时间间隔的数据。
算法的诞生原因
该算法是由日本学者Itakura提出,根源是时间序列的锁步度量不足以比较长度不一的时间序列的相似度,而单纯的弹性度量的性能又比较差。锁步度量和弹性度量是时间序列的两种比较方式,其中锁步度量是无视时间序列长度,直接在需要比较的同一序列的同一时间节点对特征值进行比较;而弹性度量允许时间序列的某一个节点可以以“一对多”的方式进行比较,跳出了必须在同一时间节点比较的限制。
算法基本原理
假设有两条时间序列 a 和 b ,长度分别为 x 和 y,其中特征值为: , 如果,直接横向比较两个序列的特征值就好了。但如果x不等于y就需要对齐。最简单的对齐方式就是线性缩放,也就是把两组序列其中一组通过变长或者变短的方式使得其与另外一组序列长度一致。但是这样的方式没有考虑到时间序列中各个节点的数据在不同情况下的持续时间会产生或长或短的变化,因此识别效果不可能达到最佳。因此更多的是采用动态规划(Dynamic Programming)的方法,这也是该算法被称为动态时间规整算法而不是时间规整算法的原因。
为了对齐这两个序列,我们不去把序列进行缩放,而是通过构造矩阵然后在矩阵中找到对齐路径,这个过程也就是Warping,我们可以把路径的第k个元素表示为(这里可以把W看作对齐路径的函数)。 在构造矩阵后,我们要对遍历矩阵创造约束,不然就会变成单纯的弹性度量
- 边界条件:矩阵的首尾必须对应(对应时间序列的开始和结束)
- 单调性:若,则,这是表示对齐路径必须随着时间的递增而递增
- 连续性:对齐路径必须连续,也就是一个节点只能跟其所在时间周围一个时间步去对齐,而不能横跨时间步去跟别的节点匹配,否则对齐路径会出现疏漏情况。
其中,根据这些性质找出对齐路径后,我们还可以对该路径进行优化,用动态规划的思想去找出消耗最小的路径(这里本人了解不够,暂时不做说明,以后有时间会更新,如果读者觉得讲的不够详细的,可以去看看网上大佬的文章)