【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现

简介: 【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现

原文链接:http://tecdat.cn/?p=22945


动态时间扭曲算法何时、如何以及为什么可以有力地取代常见的欧几里得距离,以更好地对时间序列数据进行分类点击文末“阅读原文”获取完整代码数据


时间序列分类的动态时间扭曲


使用机器学习算法对时间序列进行分类需要一定的熟悉程度。


时间序列分类(TSC)任务通常由监督算法解决,它旨在创建分类器,将输入时间序列映射到描述时间序列本身的一个或多个特征的离散变量(类)中。

可以在语音识别或手势和运动识别中找到时序分类任务的有趣示例。

图 — 移动识别示例

用于其他类型的数据(例如表格数据)的标准分类算法不能直接应用,因为它们将每个样本与其他样本分开处理。

对于时间序列,不能忽略数据的时间顺序,因此,不能考虑时间序列的每个样本而考虑其他样本,但必须保留时间顺序

出于这个原因,在文献中,有几种类型的时间序列分类技术,将在下一段中简要解释。


时间序列分类方法


作为TSC不同类型方法的简要概述。

  • 基于区间的方法:从不同的区间中提取时间序列的特征和信息,并将标准分类器应用于特征本身。算法的一个示例是时序森林分类器
  • 基于字典 的方法:将时间序列的特征转换为代表类的单词。标准分类器应用于提取单词的分布。算法的一个例子是模式袋
  • 基于频率的方法:在频谱水平上提取时间序列的特征,通过频率分析和连续的标准分类器。算法的一个示例是随机间隔频谱集成
  • 基于形状的方法:形状是代表类的时间序列的子序列。提取时间序列中k个最具特征的形状,然后使用标准分类器。算法的一个示例是 Shapelet 变换分类器
  • 集成方法:对于一般问题非常有竞争力,它们结合了几个估计器,例如HIVE-COTE算法。


基于距离的方法


在本文中,我们将重点介绍基于距离的方法

它是一种将距离度量分类器混合以确定类成员的非参数方法。分类器通常是 k 最近邻 (KNN)  算法,用于了解要标记的时间序列是否与训练数据集中的某些时间序列相似。根据邻域,最近的类或最近类的聚合与所分析的时间序列相关联。动态时间扭曲(DTW)是基于距离的方法的一个示例。


图  — 基于距离的方法


距离指标


在时间序列分类中,我们需要计算两个序列之间的距离,同时牢记每个序列内样本之间的时间关系依赖性。选择正确的指标是这种方法的基础。


欧几里得距离

让我们开始考虑常见的欧几里得距离

鉴于时间序列分类,欧几里得距离是不合适的,因为即使它保留了时间顺序,它也以逐点的方式测量距离。实际上,与两个时间序列的欧几里得距离的相似性是通过考虑它们的振幅来计算的,而与相移、时移和失真无关。

以图中的示例为例。我们有树时间序列:ts1、ts2 和 ts3。我们希望检测两条正弦曲线彼此相似,因为它们具有相同的形状和上下趋势,即使它们的相位和频率略有不同。但是,如果我们计算欧几里得指标,直线 ts3 的结果更接近 ts1。


图 — 要比较的时间序列示例

之所以出现这种现象,是因为欧几里得距离正在比较曲线的振幅,而不允许任何时间拉伸。


图 — 欧几里得匹配


动态时间扭曲

引入了动态时间扭曲以避免欧几里得距离的问题。

从历史上看,它是为语音识别而引入的。如图所示,以不同的速度重复相同的句子,有必要将时间序列与相同的单词相关联,从而管理不同的速度。


图 — DTW 的语音识别应用

DTW 允许您通过确定时间序列之间的最佳对齐方式并最大程度地减少时间失真和偏移的影响来衡量时间序列之间的相似性

不同相的相似形状,及时匹配弹性翘曲。

图 — 动态时间扭曲匹配


算法

让我们考虑两个时间序列 X = (x₁, x₂, ..., xn)Y = (y₁, y₂, ..., ym), 在等距时间点采样,长度相等或不同。

我们的目标是找到对齐时间序列的最小距离


图 — 要对齐的时间序列示例

定义局部成本矩阵,该矩阵将被最小化以找到最佳对齐方式。成本矩阵 C 定义为所有时间序列点的成对距离:


图 — 当地成本矩阵 C

目的是通过遵循成本最低的路线,在局部成本矩阵上找到对齐时间序列的翘曲路径

翘曲路径 p 是局部成本矩阵上的点序列,因此是两个时间序列上的几个点序列:


必须满足一些条件:

  • 边界条件:


翘曲路径的起点和终点必须是序列的第一个和最后一个点。

  • 单调性条件:


以保留时间顺序。

  • 步长条件:


以限制跳跃和时间偏移,同时对齐序列。

每个翘曲路径都有相关的成本:

  • 与翘曲路径 p 相关的成本函数



图 — 翘曲路径示例(非最佳)

目的是找到最佳的翘曲路径:


DTW 通过递归实现解决,为此可以找到成本最低的翘曲路径:


图 — 最佳翘曲路径

找到最佳翘曲路径后,将计算出相关的最优成本,并将其用作 DTW 距离。

递归实现达到最优,但计算成本为 O(NM), 其中 N 和 M 是两个时间序列的长度。


k-最近邻


回到对感兴趣的时间序列进行分类的原始问题,距离度量可以与k-最近邻(k-nn)算法耦合。这意味着您可以计算时间序列到训练数据集中所有其他时间序列的 DTW 距离。然后,如果您正在考虑使用 1-nn 方法,则可以将最近邻的类与时间序列相关联,或者,同样,您可以将 k 最近类中最常用的类与 k-nn 方法相关联。

通过这种方式,您已经达到了为时间序列分配类的目标,该方法考虑了时间序列的时移。


传统 DTW 的替代方法可加快速度


快速 DTW

提出了一种多级方法来加快FastDTW算法中的算法速度。

它需要不同的步骤:

  • 粗化: 将时间序列缩小为较粗的时间序列。这通过对相邻点对求平均值来减小时间序列的大小。
  • 投影: 找到最小距离的翘曲路径,用作更高分辨率翘曲路径的初始猜测。
  • 优雅: 通过局部调整将翘曲路径从较低分辨率细化到较高分辨率。此步骤在投影路径的邻域中查找最佳翘曲路径,半径 r 参数控制邻域的大小。


图 — 快速 DTW

FastDTW允许快速分辨率,复杂度为O(Nr), 具有良好的次优解决方案。


R语言实现


在这篇文章中,我们将学习如何找到两个数字序列数据的排列。


创建序列数据


首先,我们生成序列数据,并在一个图中将其可视化。

plot(a, type = "l")
lines(b, col = "blue")

点击标题查阅往期内容


Python用KShape对时间序列进行聚类和肘方法确定最优聚类数k可视化


01

02

03

04


计算规整方式


dtw()函数计算出一个最佳规整方式。

align(a, b)

返回以下项目。你可以参考str()函数来了解更多信息。

现在,我们可以绘制组合。


用双向的方法作图


动态时间规整结果的绘图:点比较

显示查询和参考时间序列以及它们的排列方式,进行可视化检查。

Plot(align)

用密度作图

显示叠加了规整路径的累积成本密度 。

该图是基于累积成本矩阵的。它将最优路径显示为全局成本密度图中的 "山脊"。

PlotDensity(align)

小结


总而言之, DTW是一种非常有用的计算序列最小距离的方法, 不论是在语音序列匹配, 股市交易曲线匹配, 还是DNA碱基序列匹配等等场景, 都有其大展身手的地方. 它的最大特点是在匹配时允许时间上的伸缩, 因此可以更好的在一堆序列集合中找到最佳匹配的序列.

  1. Eamonn Keogh, Chotirat Ann Ratanamahatana, Exact indexing of dynamic time warping, Knowledge and Information Systems, 2005.
相关文章
|
25天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
77 4
|
2月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
54 3
|
22天前
|
存储 算法 安全
SnowflakeIdGenerator-雪花算法id生成方法
SnowflakeIdGenerator-雪花算法id生成方法
20 1
|
26天前
|
JSON 算法 数据挖掘
基于图论算法有向图PageRank与无向图Louvain算法构建指令的方式方法 用于支撑qwen agent中的统计相关组件
利用图序列进行数据解读,主要包括节点序列分析、边序列分析以及结合节点和边序列的综合分析。节点序列分析涉及节点度分析(如入度、出度、度中心性)、节点属性分析(如品牌、价格等属性的分布与聚类)、节点标签分析(如不同标签的分布及标签间的关联)。边序列分析则关注边的权重分析(如关联强度)、边的类型分析(如管理、协作等关系)及路径分析(如最短路径计算)。结合节点和边序列的分析,如子图挖掘和图的动态分析,可以帮助深入理解图的结构和功能。例如,通过子图挖掘可以发现具有特定结构的子图,而图的动态分析则能揭示图随时间的变化趋势。这些分析方法结合使用,能够从多个角度全面解读图谱数据,为决策提供有力支持。
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
55 3
|
2月前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。
|
2月前
|
算法 索引
HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导
HashMap在扩容时,会创建一个新数组,并将旧数组中的数据迁移过去。通过(e.hash & oldCap)是否等于0,数据被巧妙地分为两类:一类保持原有索引位置,另一类索引位置增加旧数组长度。此过程确保了数据均匀分布,提高了查询效率。
45 2
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
该算法结合了遗传算法(GA)与分组卷积神经网络(GroupCNN),利用GA优化GroupCNN的网络结构和超参数,提升时间序列预测精度与效率。遗传算法通过模拟自然选择过程中的选择、交叉和变异操作寻找最优解;分组卷积则有效减少了计算成本和参数数量。本项目使用MATLAB2022A实现,并提供完整代码及视频教程。注意:展示图含水印,完整程序运行无水印。
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了一种基于WOA优化的GroupCNN分组卷积网络时间序列预测算法。使用Matlab2022a开发,提供无水印运行效果预览及核心代码(含中文注释)。算法通过WOA优化网络结构与超参数,结合分组卷积技术,有效提升预测精度与效率。分组卷积减少了计算成本,而WOA则模拟鲸鱼捕食行为进行优化,适用于多种连续优化问题。
|
3月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
110 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
下一篇
DataWorks