时序预测的深度学习算法介绍(2)
CNN通过卷积层和池化层等操作可以自动提取时间序列数据的特征,从而实现时序预测。在应用CNN进行时序预测时,需要将时间序列数据转化为二维矩阵形式,然后利用卷积和池化等操作进行特征提取和压缩,最后使用全连接层进行预测。相较于传统的时序预测方法,CNN能够自动学习时间序列数据中的复杂模式和规律,同时具有更好的计算效率和预测精度。
2.2.1 WaveNet(2016)Paper:WAVENET: A GENERATIVE MODEL FOR RAW AUDIO
WaveNet是由DeepMind团队在2016年提出的一种用于生成语音的神经网络模型,它的核心思想是利用卷积神经网络来模拟语音信号的波形,并使用残差连接和门控卷积操作来提高模型的表示能力。除了用于语音生成,WaveNet还可以应用于时序预测任务。在时序预测任务中,我们需要预测给定时间序列的下一个时间步的取值。通常情况下,我们可以将时间序列看作是一个一维向量,并将其输入到WaveNet模型中,得到下一个时间步的预测值。
在WaveNet模型的构建中,关键的是对卷积层的设计和参数调整。卷积层的设计可以影响模型的表达能力和泛化能力,参数的调整可以影响模型的预测准确性和鲁棒性。
2.2.2 TCN(2018)Paper:An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling
TCN(Temporal Convolutional Network)是一种基于卷积神经网络的时序预测算法,其设计初衷是为了解决传统RNN(循环神经网络)在处理长序列时存在的梯度消失和计算复杂度高的问题。。相比于传统的RNN等序列模型,TCN利用卷积神经网络的特点,能够在更短的时间内对长期依赖进行建模,并且具有更好的并行计算能力。TCN模型由多个卷积层和残差连接组成,其中每个卷积层的输出会被输入到后续的卷积层中,从而实现对序列数据的逐层抽象和特征提取。TCN还采用了类似于ResNet的残差连接技术,可以有效地减少梯度消失和模型退化等问题,而空洞卷积可以扩大卷积核的感受野,从而提高模型的鲁棒性和准确性。
TCN模型的结构如下图所示:
TCN模型的预测过程包括以下几个步骤:
- 输入层:接收时间序列数据的输入。
- 卷积层:采用一维卷积对输入数据进行特征提取和抽象,每个卷积层包含多个卷积核,可以捕获不同尺度的时间序列模式。
- 残差连接:类似于ResNet,通过将卷积层的输出与输入进行残差连接,可以有效地减少梯度消失和模型退化等问题,提高模型的鲁棒性。
- 重复堆叠:重复堆叠多个卷积层和残差连接,逐层提取时间序列数据的抽象特征。
- 池化层:在最后一个卷积层之后添加一个全局平均池化层,将所有特征向量进行平均,得到一个固定长度的特征向量。
输出层:将池化层的输出通过一个全连接层进行输出,得到时间序列的预测值。
TCN模型的优点包括:
- 能够处理长序列数据,并且具有良好的并行性。
- 通过引入残差连接和空洞卷积等技术,避免了梯度消失和过拟合的问题。
- 相对于传统RNN模型,TCN模型具有更高的计算效率和预测准确率。
# 模型构建TCN = TCNModel( input_chunk_length=13, output_chunk_length=12, n_epochs=200, dropout=0.1, dilation_base=2, weight_norm=True, kernel_size=5, num_filters=3, random_state=0,)# 模型训练,无协变量TCN.fit(series=train, val_series=val, verbose=True)# 模型训练,有协变量TCN.fit(series=train, past_covariates=train_month, val_series=val, val_past_covariates=val_month, verbose=True)# 模型推理backtest = TCN.historical_forecasts( series=ts, # past_covariates=month_series, start=0.75, forecast_horizon=10, retrain=False, verbose=True,)# 成果可视化ts.plot(label="actual")backtest.plot(label="backtest (D=10)")plt.legend()plt.show()数据归一化对时序预测影响探究?
原始数据是否按月份生成协变量,是否归一化,对最终时序预测效果影响重大,就本实验场景而言,原始数据为百分制更适用于无归一化&有协变量方式,协变量需根据实际业务表现进行选择。
归一化&无协变量
归一化&有协变量
无归一化&无协变量
无归一化&有协变量
Paper:Probabilistic Forecasting with Temporal Convolutional Neural Network.Code:deepTCN
DeepTCN(Deep Temporal Convolutional Networks)是一种基于深度学习的时序预测模型,它是对传统TCN模型的改进和扩展。DeepTCN模型使用了一组1D卷积层和最大池化层来处理时序数据,并通过堆叠多个这样的卷积-池化层来提取时序数据的不同特征。在DeepTCN模型中,每个卷积层都包含多个1D卷积核和激活函数,并且使用残差连接和批量归一化技术来加速模型的训练。
DeepTCN模型的训练过程通常涉及以下几个步骤:
- 数据预处理:将原始的时序数据进行标准化和归一化处理,以减小不同特征的尺度不一致对模型训练的影响。
- 模型构建:使用多个1D卷积层和最大池化层构建DeepTCN模型,可以使用深度学习框架,如TensorFlow、PyTorch等来构建模型。
- 模型训练:使用训练数据集对DeepTCN模型进行训练,并通过损失函数(如MSE、RMSE等)来度量模型的预测性能。在训练过程中,可以使用优化算法(如SGD、Adam等)来更新模型参数,并使用批量归一化和DeepTCN等技术来提高模型的泛化能力。
模型评估:使用测试数据集对训练好的DEEPTCN模型进行评估,并计算模型的性能指标,如平均绝对误差(MAE)、平均绝对百分比误差(MAPE)等。
就本实验场景而言,受原始数据样本限制,输入输出长度和batch_size无法过大调整,从性能角度建议选用大batch_size&短输入输出方式。
# 短输入输出deeptcn = TCNModel( input_chunk_length=13, output_chunk_length=12, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)# 长输入输出deeptcn = TCNModel( input_chunk_length=60, output_chunk_length=20, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)# 长输入输出,大batch_sizedeeptcn = TCNModel( batch_size=60, input_chunk_length=60, output_chunk_length=20, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)# 短输入输出,大batch_sizedeeptcn = TCNModel( batch_size=60, input_chunk_length=13, output_chunk_length=12, kernel_size=2, num_filters=4, dilation_base=2, dropout=0.1, random_state=0, likelihood=GaussianLikelihood(),)
短输入输出
长输入输出
长输入输出,大batch_size
短输入输出,大batch_size
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。