首页 > 编程语言 >一个实际例子演示动态时间规整(Dynamic Time Warping, DTW )算法

一个实际例子演示动态时间规整(Dynamic Time Warping, DTW )算法

时间:2023-09-08 11:35:35浏览次数:54  
标签:Warping matrix distance dtw Dynamic Time seq2 seq1 DTW

用一个实际例子,演示动态时间规整(Dynamic Time Warping, DTW   )算法

 

 

动态时间规整 (Dynamic Time Warping, DTW) 是一种用于度量两个时间序列之间的差异的算法,尤其是当这两个序列出现时间偏移或速度不同的情况。例如,DTW 可用于语音识别或股价数据分析。

以下是一个简单的 DTW 算法实现例子,我们将使用 Python 和 numpy 来计算两个时间序列之间的 DTW 距离:

1. 定义 DTW 函数

pythonCopy code

2. 定义两个时间序列并计算它们的 DTW 距离

pythonCopy code

 

import numpy as np

def dtw(seq1, seq2):
    m, n = len(seq1), len(seq2)
    # 创建一个 m x n 的矩阵,初始化为无穷大
    dtw_matrix = np.zeros((m+1, n+1))
    dtw_matrix[0, 1:] = float('inf')
    dtw_matrix[1:, 0] = float('inf')

    for i in range(1, m+1):
        for j in range(1, n+1):
            cost = (seq1[i-1] - seq2[j-1])**2
            # 选择之前三个操作中的最小值
            dtw_matrix[i, j] = cost + min(dtw_matrix[i-1, j], dtw_matrix[i, j-1], dtw_matrix[i-1, j-1])

    return dtw_matrix[m, n]

seq1 = np.array([1, 1, 2, 3, 2, 0])
seq2 = np.array([0, 1, 1, 2, 3, 2, 1])
distance = dtw(seq1, seq2)
print("DTW distance between seq1 and seq2:", distance)
# 答案是2

seq1 = np.array([1, 3, 2, 2, 4, 4])
seq2 = np.array([1, 1, 3, 3, 2, 4])
distance = dtw(seq1, seq2)
print("DTW distance between seq1 and seq2:", distance)
# 答案是0 见图

  

在上述例子中,我们定义了两个简单的时间序列并使用 DTW 函数来计算它们之间的距离。返回的距离给出了两个时间序列之间的差异度量。

需要注意的是,这只是一个基本的 DTW 实现,专门为了说明算法而设计。在实际应用中,可能会使用更高级的版本和优化技术,例如使用约束条件来减少计算复杂性,或者使用快速近似方法来加速计算。

 

一个实际例子演示动态时间规整(Dynamic Time Warping, DTW )算法_机器学习

本质上就是一个最短路的动态规划算法,无非是路径可以斜着走而已!

 

 

 

这里是不是有错啊?cost = (seq1[i-1] - seq2[j-1])**2 是不是应该是取绝对值?  

对于 DTW,计算两个点之间的“距离”或“代价”可以有多种方式。常用的方式确实是取两点的绝对差,但平方差也是合理的选择。选择哪种方式取决于应用的具体需求。

使用绝对差值:

pythonCopy code

cost = abs(seq1[i-1] - seq2[j-1])

使用平方差:

pythonCopy code

cost = (seq1[i-1] - seq2[j-1])**2

这两种方式都可以用在 DTW 算法中,但它们可能会导致稍微不同的结果。绝对差值可能在某些应用中更有意义,尤其是当我们关心的是实际的差异大小而不是差异的平方时。

因此,如果你的应用更适合使用绝对差值,那么可以替换为 cost = abs(seq1[i-1] - seq2[j-1])

 

我看到默认都是绝对值!



标签:Warping,matrix,distance,dtw,Dynamic,Time,seq2,seq1,DTW
From: https://blog.51cto.com/u_11908275/7408028

相关文章

  • Qt QDateTime类型加减计算
    在Qt框架中,QDateTime类提供了一系列可以进行日期和时间的加减计算的方法,可用于处理日期和时间相关的问题。一些常用的方法如下:1.QDateTime::addDays(intdays):在当前时间的基础上增加指定天数后的日期和时间。1QDateTimecurrentDateTime=QDateTime::currentDateTime();2Q......
  • QT QDateTime 计算两个日期时间差
    1、计算两个日期天数差1QDateTimetime1=QDateTime::fromString("2020-11-2616:40:02","yyyy-MM-ddhh:mm:ss");2//QDateTimetime2=QDateTime::fromString("2020-11-2616:43:02","yyyy-MM-ddhh:mm:ss");3QDateTimetime2=QD......
  • Time Matters Sequential Recommendation with Complex Temporal Information
    目录概符号说明TASERAbsoluteTemporalModuleRelativeTemporalModuleDecoderYeW.,WangS.,ChenX.,WangX.,QinZ.andYinD.TimeMatters:Sequentialrecommendationwithcomplextemporalinformation.SIGIR,2020.概Absolute+Relative信息,相对来说,在......
  • 深入研究java.lang.Runtime类
    在线API:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Runtime.html转自:http://lavasoft.blog.51cto.com/62575/15565一、概述     Runtime类封装了运行时的环境。每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。     ......
  • ElementUI-DateTimePicker时间限制+清空
    1需求有两个时间控件,开始时间不能大于结束时间<el-col:span="8"><el-date-pickerv-model="queryParams.startDate"size="small"type="datetime"......
  • zone.js由入门到放弃之三——zone.js 源码分析【setTimeout篇】
    Delegate是个好东西,看看孙啸达同学对ZoneDelegate的介绍吧,这是他关于zone.js系列文章的第三篇~zone.js系列往期文章zone.js由入门到放弃之一——通过一场游戏认识zone.jszone.js由入门到放弃之二——zone.jsAPI大练兵zone.js源码分析接下来的全是干货,从头到尾,一干到底一点前置:Zon......
  • 无涯教程-JavaScript - TIMEVALUE函数
    描述TIMEVALUE函数返回由文本字符串表示的时间的十进制数。十进制数字是一个介于0(零)到0.99988426之间的值,代表从0:00:00(12:00:00AM)到23:59:59(PM11:59:59)的时间。语法TIMEVALUE(time_text)争论Argument描述Required/OptionalTime_textAtextstringthatre......
  • 简读||Dynamic Metasurface Antennas for Uplink Massive MIMO Systems
    用于上行链路大规模MIMO系统的动态超表面天线摘要:大规模多输入多输出(MIMO)通信是近年来人们广泛关注的焦点。虽然大规模MIMO的理论增益已经确立,但在实践中实现具有大规模天线阵列的MIMO系统仍具有挑战性。与大规模MIMO系统相关的实际挑战包括成本、功耗和物理尺寸的增加。......
  • Pandas中的to_datetime函数用法
    Pandas中的to_datetime函数用法importdatetimeimportpandasaspdimportnumpyasnp将字符串转换为日期时间:pd.to_datetime('2023-09-06')Timestamp('2023-09-0600:00:00')将多个字符串转换为日期时间:pd.to_datetime(['2023-09-06','2023-09-07'......
  • A Challenge Dataset and Effective Models for Aspect-Based Sentiment Analysis
    摘要基于方面的情感分析(ABSA)由于其广泛的应用,近年来受到了越来越多的关注。在现有的ABSA数据集中,大多数句子只包含一个或多个具有相同情感极性的方面,这使得ABSA任务退化为句子级情感分析。在本文中,我们提出了一个新的大规模多方面多情感(MAMS)数据集,其中每个句子至少包含两个具有不......