【国庆特辑文章】时间序列~动态时间规整(Dynamic Time Wraping)

简介: 测量两端时间序列的相似性。

一、解决的问题

测量两端时间序列的相似性。

在语音识别中,特别是单音节的识别中,每个人说话时间长短不同,导致时间序列长度不同。DTW算法就是将某些数据点的时间Wrap到另一个时间序列的某些数据点,以辅助计算相似性。

二、算法设计

1.规则

  • 两端对齐
  • 一个点可以对应另一序列的多个点(允许重合对应)
  • 每一对数据点对齐不可交叉(只能向前对应)

2.成本矩阵

  • 有两不同长度时间序列

image.png

  • 构建距离矩阵

image.png

矩阵元素

image.png

dist通常采用欧氏距离

  • 在矩阵D中搜索从

image.png

image.png

之间的最短路径(采用动态规划搜索算法,向右、上、右上三个方向搜索);

  • 这个最短路径的和作为XY之间的相似度。

三、代码实现

'''
@Author: Classmate.Liu loved Technology
@Date: 2022-10-01 08:33:00
@LastEditTime: 2022-10-01 09:40:22
@FilePath: D:\A\Project_1\main_5.py
'''
# import package
from importlib.resources import path
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
# define operation functions (including lambda expressions)
def DTW(X, Y, distance = lambda a, b: np.linalg.norm(a -b)):
    ''' dynamic time warping '''
    N, M = len(X), len(Y)
    cost = np.ones([N, M]) * np.inf
    for i in range(N):
        for j in range(M):
            dist_ij = distance(X[i], Y[j])
            dist_pr = min(cost[i - 1, j] if i-1>=0 else np.inf, cost[i, j-1] if j-1>=0 else np.inf, cost[i, j-1] if j-1>=0 and i+1>=0 else np.inf)
            cost[i, j] = dist_ij + (dist_pr if dist_pr < np.inf else 0)
        # traced back cost matrix to get minimum distance path
        i, j = N - 1, M - 1
        path = [(i, j)]
        while i > 0 or j > 0:
            condidate = []
            if i-1>=0:
                condidate.append((cost[i-1, j], (i-1, j)))
            if j-1>=0:
                condidate.append((cost[i, j-1], (i, j-1)))
            if i-1>=0 or j-1>=0:
                condidate.append((cost[i-1, j-1], (i-1, j-1)))
            i, j = min(condidate)[1]
            path.append((i, j))
        return cost[N-1, M-1], path
g_X = np.random.uniform(size=18)
g_Y = np.random.uniform(size=16) + 3.0
dist, path = DTW(g_X, g_Y)
print('Dist(X, Y) = ', dist)
plt.plot(g_X)
plt.plot(g_Y)
for ij in path:
    plt.plot(ij[0], ij[1]),
[g_X[ij[0]], g_Y[ij[1]], 'gray']
plt.show()

四、运行结果

图一:窗体运行结果


图二:终端运行结果

五、性能优化

  • 绝大多数最短距离不会偏离对角线太远;

  • 先在低精度下确定轮廓,随后在轮廓内计算更高精度路径。

相关文章
|
6月前
【SPSS】生存-寿命表分析详细操作教程(附案例实战)
【SPSS】生存-寿命表分析详细操作教程(附案例实战)
364 0
|
3月前
|
JSON 分布式计算 监控
《数据版本迷宫揭秘》——Delta Lake如何玩转时间旅行,让你的数据不再迷失!
【8月更文挑战第27天】Delta Lake是一款为Apache Spark设计的高性能数据存储系统,提供ACID事务、可扩展的元数据管理和数据版本控制等功能。利用不可变的JSON格式事务日志,Delta Lake能追踪所有表变更,确保数据一致性和可追溯性。每项写操作都会生成新的事务日志文件,支持轻松回溯至任意版本。此外,Delta Lake还具备数据回溯、确保数据一致性及审计监控等优点,为大数据环境下的数据治理提供强大支持。
43 0
|
5月前
|
机器学习/深度学习 计算机视觉
ICLR 2024 Oral :应对随时间变化的分布偏移,西安大略大学等提出学习时序轨迹方法
【6月更文挑战第27天】ICLR 2024 Oral 提出解决时间分布偏移新策略:潜在轨迹学习。针对数据分布随时间变化的挑战,西安大略大学研究团队提出一种方法,通过学习数据的时序轨迹增强模型泛化。在连续的潜在空间中建模分布变化,改善对未见数据的适应性。实验显示在多种场景下性能提升,但需更多计算资源且依赖部分标记数据。[论文链接](https://openreview.net/pdf?id=bTMMNT7IdW)**
53 2
|
6月前
|
人工智能 算法 数据可视化
R语言DTW(Dynamic Time Warping) 动态时间规整算法分析序列数据和可视化
R语言DTW(Dynamic Time Warping) 动态时间规整算法分析序列数据和可视化
|
Python
Data Science | 时期时间傻傻分不清楚
Data Science | 时期时间傻傻分不清楚
|
6月前
|
数据挖掘 数据库
GEE——降水数据分析(半天)图表分析含(IANA(IANA Time Zone Database) 时区名称的定义)
GEE——降水数据分析(半天)图表分析含(IANA(IANA Time Zone Database) 时区名称的定义)
86 1
|
6月前
|
人工智能
GEE数据的白天day/夜晚night LST数据按照QC掩膜后的结果差异明显
GEE数据的白天day/夜晚night LST数据按照QC掩膜后的结果差异明显
71 0
|
6月前
|
定位技术 计算机视觉
Google Earth Engine谷歌地球引擎计算多年中某两个时间点之间遥感数据差值的平均值
Google Earth Engine谷歌地球引擎计算多年中某两个时间点之间遥感数据差值的平均值
104 2
R生存分析|关心的变量KM曲线不显著,还有救吗?
R生存分析|关心的变量KM曲线不显著,还有救吗?
108 0
YOLOv7默默更新了Anchor-Free | 无痛再涨1.4个mAP
YOLOv7默默更新了Anchor-Free | 无痛再涨1.4个mAP
396 0