
基于深度学习的时间序列分类
《Deep learning for time series classification a review》
1.引言
本文针对以下开放性问题:
TSC目前最先进的DNN是什么?
当前的DNN方法是否达到TSC的最先进性能并且不如HIVECOTE复杂?
哪种类型的DNN架构最适合TSC任务?
随机初始化如何影响深度学习分类器的性能?
最后:是否可以避免DNN的黑盒效应以提供可解释性?
我们的实验表明,不仅DNN能够明显优于NN-DTW,而且 使用深度残差网络架构也能够获得与COTE和HIVE-COTE没有显着差异的结果(He等,2016; Wang等,2017b)。 最后,我们分析了差的随机初始化如何对DNN的性能产生重大影响。
本文主要贡献:
我们用实际例子解释,深度学习如何适应一维时间序列数据。
我们提出了一个统一的分类法,它将TSN最近在各个领域的DNN应用重新组合在两个主要类别下:生成模型和判别模型。
我们详细介绍了专为TSC设计的九种端到端深度学习模型的架构。
我们在单变量UCR / UEA档案基准和12个MTS分类数据集上评估这些模型。
我们为社区提供了一个针对TSC的开源深度学习框架,我们在其中实施了所有九种方法。
我们研究了类激活图(CAM)的使用,以减少DNN的黑盒效应,并解释各种模型所做出的不同决策。
2.背景
2.2基于深度学习的时间序列分类
(原文给出了,卷积神经网络(CNN)和回声状态网络(ESN)三种模型理论,这里只简介卷积神经网络)
由于这些CNN架构在这些不同领域的成功,研究人员已经开始采用它们进行时间序列分析(Cristian Borges Gamboa,2017)。
2.2.1 多层感知器(MLP)
对时间序列数据采用MLPs的一个障碍是,它们不表现出任何空间不变性。换句话说,每个时间戳都有自己的权重,时间信息就会丢失:这意味着时间序列元素被独立处理。
对于TSC来说,最后一层通常是一个判别层,它将前一层的激活作为输入,并给出数据集中类别变量的概率分布。大多数用于TSC的深度学习方法都采用了softmax层,它相当于一个以softmax为激活函数f的FC层,神经元的数量与数据集中的类的数量相等。三个主要的有用特性促使我们使用softmax激活函数:保证概率之和等于1,该函数是可微分的,并且它是Logistic回归在多指标情况下的一种调整。
在DNN的分类任务中,最常用的损失函数是分类交叉熵。
2.2.2 卷积神经网络(CNN)
卷积可以被视为在时间序列上应用和滑动滤波器。
与图像不同,滤镜仅显示一个维度(时间)而不是两个维度(宽度和高度)。
滤波器也可以看作是时间序列的通用非线性变换。
具体地说,如果我们将长度为3的滤波器与单变量时间序列进行卷积(相乘),则将滤波器值设置为等于[1/3,1/3,1/3],卷积将导致应用具有长度为3的滑动窗口的移动平均值。将卷积应用于居中时间戳t的一般形式在下面的等式中给出:
其中C表示的是长度为T的单变量时间序列X和长度为l ll的滤波器ω \omegaω上应用的卷积(点积), 然后添加偏置b,最后输入到非线性激活函数例如整流线性单元(ReLU)中的结果。 一个时间序列X上的卷积(一个滤波器)的结果可以被认为是经历滤波处理的另一个单变量时间序列C. 因此,在时间序列上应用多个滤波器将产生多变量时间序列,其维度等于所使用的滤波器的数量。 在输入时间序列上应用多个过滤器的方法可以学习多个判别特征,这对分类任务有很大帮助。
与MLP不同,相同的卷积(相同的滤波器值w和b)将用于查找所有时间戳的结果t ∈ [ 1 , T ] t \in [1,T]t∈[1,T]。 这是CNN的一个非常强大的属性(称为权重共享),使他们能够学习在时间维度上不变的过滤器。
当考虑将MTS作为卷积层的输入时,滤波器不再具有一个维度(时间),而且具有等于输入MTS的维度数量的维度。
最后,不应手动设置过滤器的值 ω \omegaω,应自动学习这些值,因为它们高度依赖于目标数据集。 例如,一个数据集的最佳过滤器等于[1,2,2]而另一个数据集的最佳滤波器等于[2,0,-1]。对于最优我们指的是一个过滤器,其应用程序将使分类器能够轻松区分数据集种类。 为了自动学习一个判别过滤器,卷积后面应该是一个判别分类器,通常先是一个池化操作,可以是局部的也可以是全局的。
诸如平均或最大池的本地池化采用输入时间序列并通过在其滑动窗口上聚合来减小其长度T. 例如,如果滑动窗口的长度等于3,则得到的合并时间序列将具有等于
的长度 这仅在步幅等于滑动窗口的长度时才为真。 通过全局池化操作,时间序列将在整个时间维度上聚合,从而产生单个实际值。 换句话说,这类似于应用滑动窗口长度等于输入时间序列长度的本地池化。 通常采用全局聚合来大幅减少模型中参数的数量,从而降低过度拟合的风险,同时允许使用CAM来解释模型的决策(Zhou et al,2016)。
除了池化层,一些深度学习架构还包括归一化层,以帮助网络快速收敛。 对于时间序列数据,批量归一化操作在每个通道上执行,因此防止内部协变量在一个小批量时间序列培训中转移(Ioffe和Szegedy,2015)。 Ulyanov等人提出了另一种归一化方法(2016)标准化每个实例而不是每批次,从而通过梯度下降学习每个层的每个训练实例的平均值和标准偏差。 后一种方法称为实例标准化,并模拟学习时间序列训练数据的z标准化参数。(各种归一化参考这里)
最终的判别层采用输入时间序列的表示(卷积的结果),并给出数据集中类变量的概率分布。 通常,该层由与MLP类似的softmax操作组成。 请注意,对于某些方法,我们在最终的softmax层之前会有一个额外的非线性FC层,这会增加网络中的参数数量。 最后,为了训练和学习深CNN的参数,该过程与训练MLP相同:前馈传递,然后是反向传播。 具有三个卷积层的TSC的CNN架构的示例在下图中示出。
常用包
1.sktime示例
sktime库
1.Code for Deep learning for time series classification: a review.
2.dl-4-tsc.Deep Learning for Time Series Classification.
思路
问01:已有3种带有标签类别的时间序列样本300个,使用Transformer或informer或其它更有优势的模型,对实时的时间序列走势,判断它所属的类别,以及属于该类别的完整度。
使用Transformer或Informer进行时间序列分类与完整度判断
问题分析
您提出的问题非常有意思,即在给定多个带标签的时间序列样本的情况下,如何利用Transformer或Informer等模型对实时输入的时间序列进行分类,并判断其所属类别的完整度。这在许多实际应用场景中都有着重要的意义,比如:
工业过程监控: 判断某个生产过程是否正常,以及偏离正常状态的程度。
医疗数据分析: 判断患者的心电图、脑电图等生理信号是否异常,以及异常的类型。
金融数据分析: 判断股票、期货等金融产品的走势,并预测其未来的发展趋势。
解决方案
- 数据预处理
特征提取: 从原始时间序列中提取有用的特征,如统计特征(均值、方差、峰值)、频域特征(傅里叶变换)、时域特征(自相关系数)。
归一化: 将特征值归一化到相同的范围,提高模型的训练效率。
序列分割: 将长序列分割成固定长度的子序列,作为模型的输入。 - 模型选择
Transformer: 擅长捕捉序列之间的长距离依赖关系,适用于变长的序列数据。
Informer: 在处理长序列时效率更高,适用于大规模时间序列数据。
LSTM/GRU: 经典的RNN模型,在时间序列任务中表现良好。
TCN (Temporal Convolutional Network): 结合了CNN和RNN的优点,适用于时间序列分类任务。 - 模型结构
编码器: 将输入的时间序列编码成一个固定长度的向量,捕捉序列的特征。
分类器: 对编码后的向量进行分类,判断其所属类别。
完整度判断: 可以通过添加一个额外的输出层来预测序列的完整度,例如,使用一个sigmoid函数输出一个概率值,表示序列完整的概率。 - 训练过程
损失函数: 结合分类损失(如交叉熵损失)和完整度判断损失(如二元交叉熵损失)。
优化器: 使用Adam等优化器。
数据增强: 通过随机裁剪、噪声添加等方式增加数据多样性。 - 实时预测
输入新的时间序列片段: 将实时输入的时间序列片段作为模型的输入。
输出预测结果: 模型输出所属类别和完整度概率。
参考文献
1.基于深度学习时间序列分类研究综述[论文阅读].
2.《Deep learning for time series classification a review》笔记.
3.基于深度学习的时间序列分类综述代码运行步骤(Deep-learning-for-time-series-classification-a-review).
4.数据派THU.全面!深度学习时间序列分类的综述!
5.★labml.ai 带注释的 PyTorch 版论文实现
更多推荐
所有评论(0)