当前位置: 首页 > news >正文

DTW算法判断两条曲线的相似度,Python代码


本文目录

  • 如何判断两条曲线的相似度
    • 1.动态时间规整(DTW)
    • 2.用法
      • 2.1 安装库
      • 2.2 代码示例
      • 2.3 预期结果
      • 2.4 DTW相似度距离的含义


如何判断两条曲线的相似度

在判断两条曲线的相似度时,常用的方法包括:动态时间规整(DTW)、傅里叶变换、交叉相关、欧氏距离、以及基于机器学习的算法。 其中,动态时间规整(DTW)是一个较为常用且高效的方法,它通过计算两条曲线在时间轴上的非线性对齐来衡量它们的相似度。

1.动态时间规整(DTW)

动态时间规整(Dynamic Time Warping, DTW)是一种用于衡量两条时间序列(或曲线)相似度的算法,尤其适用于存在时间偏移或速度变化的情况。DTW通过计算两条曲线在时间轴上的最佳对齐路径,来最小化它们之间的距离。

DTW的核心思想是通过允许时间轴上的非线性变换,使得两条曲线在时间维度上对齐。具体步骤包括:

  • 计算距离矩阵:首先,计算两条曲线的每个点之间的欧氏距离,生成一个距离矩阵。
  • 寻找最优路径:利用动态规划算法,从距离矩阵的左上角到右下角,找到使得路径上的距离和最小的对齐路径。
  • 计算相似度:最终的相似度就是沿着最优路径累计的距离和。

2.用法

2.1 安装库

pip install fastdtw -i https://pypi.tuna.tsinghua.edu.cn/simple

2.2 代码示例

import numpy as np
from scipy.spatial.distance import euclidean
from fastdtw import fastdtw
import matplotlib.pyplot as plt# 定义两条曲线
curve1 = np.array([[1,3], [2,3.5], [3,4], [4,4.5], [5,3]])
curve2 = np.array([[1,1.5], [2,2], [3,1], [4,2], [5,1.5]])# 计算DTW距离和最优路径
distance, path = fastdtw(curve1, curve2, dist=euclidean)# 可视化两条曲线
plt.figure(figsize=(10, 6))# 绘制原始曲线 - 分别绘制x和y坐标
x1, y1 = curve1[:, 0], curve1[:, 1]
x2, y2 = curve2[:, 0], curve2[:, 1]plt.plot(x1, y1, marker='o', label='Curve 1', linewidth=2)
plt.plot(x2, y2, marker='s', label='Curve 2', linewidth=2)# 绘制DTW对齐路径
for (i, j) in path:plt.plot([curve1[i, 0], curve2[j, 0]], [curve1[i, 1], curve2[j, 1]], 'k--', alpha=0.3)# 添加图表信息
plt.xlabel('X Value')
plt.ylabel('Y Value')
plt.title(f'DTW Similarity Distance: {distance:.2f}')
plt.legend()
plt.grid(True, alpha=0.3)# 保存图片到 ./output.jpg
plt.tight_layout()
plt.savefig('./output.jpg', dpi=300, bbox_inches='tight')# 显示图表
plt.show()# 输出DTW相似度距离
print(f"DTW相似度距离: {distance}")

2.3 预期结果

成功运行后,控制台输出如下所示:

DTW相似度距离: 2.8284271247461903

可视化图像:
在这里插入图片描述

2.4 DTW相似度距离的含义

DTW距离的含义

  • DTW距离是用来衡量两条时间序列或曲线之间相似性的指标,它通过动态规划找到两个序列之间的最优对齐方式,计算的是在最优对齐情况下,对应点之间距离的累积和。

DTW值大小的含义

  • 值越小:表示两条曲线形状越相似,在最优对齐下,对应点之间的差异越小,曲线的变化趋势越接近;
  • 值越大:表示两条曲线形状差异越大,对应点之间的距离累积和较大,曲线的整体形态差异明显;
  • 值为0:表示两条曲线完全相同(在经过最优对齐后)。

DTW距离主要用于相对比较

  • 在多个曲线中找出与目标曲线最相似的(距离最小),聚类分析中衡量曲线间的相似程度,时间序列分类和模式识别。
http://www.dtcms.com/a/330886.html

相关文章:

  • [激光原理与应用-272]:理论 - 波动光学 - 单纯的白色其实并不单纯
  • 迅为RK3562开发板获取Android13源码
  • 3D商品展示:技术狂欢下的普及困局
  • 【新启航】起落架大型结构件深孔检测探究 - 激光频率梳 3D 轮廓检测
  • Uniapp 自定义头部导航栏
  • 表达式树实战:Unity动态逻辑编程
  • 考研408《计算机组成原理》复习笔记,第三章(6)——Cache(超级重点!!!)
  • 【科研绘图系列】R语言绘制蝶形条形图蝶形柱状堆积图
  • 考研408《计算机组成原理》复习笔记,第四章(3)——指令集、汇编语言
  • 一致性哈希Consistent Hashing
  • Rust Web框架Axum学习指南之入门初体验
  • Java面试宝典:JVM性能优化
  • 【代码随想录day 20】 力扣 669. 修剪二叉搜索树
  • MySQL 性能优化实战指南:释放数据库潜能的艺术
  • 【visual studio】visual studio配置环境opencv和onnxruntime
  • 零知开源——基于STM32F4的HC-12无线通信系统及ST7789显示应用
  • 【Linux】库制作与原理
  • mysql卸载了 服务内还显示如何解决
  • CVPR 2025丨时间序列:动态多尺度机制登场,即插即用,预测稳准狠刷新SOTA
  • Vivado GPIO详解
  • 量化因子RSI
  • 中小型泵站物联网智能控制系统解决方案:构建无人值守的自动化泵站体系
  • 基于STM32单片机智能手表GSM短信上报GPS定位温湿度检测记步设计
  • OS设备UDID查看方法
  • Mybatis学习笔记(一)
  • 「iOS」————设计架构
  • 在语音通信业务量下降时候该怎么做
  • PHP现代化全栈开发:微服务架构与云原生实践
  • 基于FPGA的8PSK+卷积编码Viterbi译码通信系统,包含帧同步,信道,误码统计,可设置SNR
  • 一台联想 ThinkCentre M7100z一体机开机黑屏无显示维修记录