CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)

目录

往期精彩内容:

前言

1 风速数据CEEMDAN分解与可视化

1.1 导入数据

1.2 CEEMDAN分解

2 数据集制作与预处理

3 基于CEEMADN的 CNN-LSTM 模型预测

3.1 定义CEEMDAN-CNN-LSTM预测模型

3.2 定义模型参数

3.3 模型训练,训练结果

4 基于ARIMA的模型预测

4.1 介绍一个分量预测过程(其他分量类似)

5 结果可视化和模型评估

5.1 结果可视化

5.2 模型评估

代码、数据如下:


CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第1张图片

往期精彩内容:

时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客

风速预测(一)数据集介绍和预处理-CSDN博客

风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客

风速预测(三)EMD-LSTM-Attention模型-CSDN博客

风速预测(四)基于Pytorch的EMD-Transformer模型-CSDN博客

风速预测(五)基于Pytorch的EMD-CNN-LSTM模型-CSDN博客

风速预测(六)基于Pytorch的EMD-CNN-GRU并行模型-CSDN博客

CEEMDAN +组合预测模型(BiLSTM-Attention + ARIMA)-CSDN博客

前言

本文基于前期介绍的风速数据(文末附数据集),介绍一种综合应用完备集合经验模态分解CEEMDAN与混合预测模型(CNN-LSTM + ARIMA)的方法,以提高时间序列数据的预测性能。该方法的核心是使用CEEMDAN算法对时间序列进行分解,接着利用CNN-LSTM模型和ARIMA模型对分解后的数据进行建模,最终通过集成方法结合两者的预测结果。

风速数据集的详细介绍可以参考下文:

风速预测(一)数据集介绍和预处理-CSDN博客

1 风速数据CEEMDAN分解与可视化

1.1 导入数据

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第2张图片

1.2 CEEMDAN分解

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第3张图片

根据分解结果看,CEEMDAN一共分解出11个分量,我们大致把前8个高频分量作为CNN-LSTM模型的输入进行预测,后4个低频分量作为ARIMA模型的输入进行预测

2 数据集制作与预处理

划分数据集,按照8:2划分训练集和测试集, 然后再按照前7后4划分分量数据

在处理LSTF问题时,选择合适的窗口大小(window size)是非常关键的。选择合适的窗口大小可以帮助模型更好地捕捉时间序列中的模式和特征,为了提取序列中更长的依赖建模,本文把窗口大小提升到48,运用CCEMDAN-CNN-LSTM模型来充分提取前7个分量序列中的特征信息。

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第4张图片

分批保存数据,用于不同模型的预测

3 基于CEEMADN的 CNN-LSTM 模型预测

3.1 定义CEEMDAN-CNN-LSTM预测模型

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第5张图片

注意:输入风速数据形状为 [64, 7, 48], batch_size=64,  维度7维代表前7个分量,48代表序列长度(滑动窗口取值)。

3.2 定义模型参数

# 定义模型参数
batch_size = 64
input_len = 48   # 输入序列长度为48 (窗口值)
input_dim = 7    # 输入维度为7个分量
conv_archs = ((1, 32), (1, 64))   # CNN 层卷积池化结构  类似VGG
hidden_layer_sizes = [64, 128]  # LSTM 层 结构
output_size = 1 # 单步输出

model = CNNLSTMModel(batch_size, input_len, input_dim, conv_archs, hidden_layer_sizes, output_size=1)  

# 定义损失函数和优化函数
model = model.to(device)
loss_function = nn.MSELoss()  # loss
learn_rate = 0.003
optimizer = torch.optim.Adam(model.parameters(), learn_rate)  # 优化器

3.3 模型训练,训练结果

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第6张图片

100个epoch,MSE 为0.00573,CNN-LSTM预测效果良好,适当调整模型参数,还可以进一步提高模型预测表现。

注意调整参数:

  • 可以适当增加CNN层数和隐藏层的维度,微调学习率;

  • 调整LSTM层数和维度数,增加更多的 epoch (注意防止过拟合)

  • 可以改变滑动窗口长度(设置合适的窗口长度)

保存训练结果和预测数据,以便和后面ARIMA模型的结果相组合。

4 基于ARIMA的模型预测

传统时序模型(ARIMA等模型)教程如下:

时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客

数据加载,训练数据、测试数据分组,四个分量,划分四个数据集

4.1 介绍一个分量预测过程(其他分量类似)

第一步,单位根检验和差分处理

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第7张图片

ADF检验P值远小于0.05,故拒绝原假设,即数据是平稳的时间序列数据,也确定了d=0

第二步,模型识别,采用AIC指标进行参数选择

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第8张图片

采用AIC指标进行参数选择,得到最小的AIC值的组合为p=2,q=0,选择其作为模型进行拟合,因此针对原数据可知最终确定模型为ARIMA(2,0,0)(结合代码指标结果来看)

第三步,模型预测

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第9张图片

第四步,模型评估

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第10张图片

保存预测的数据,其他分量预测与上述过程一致,保留最后模型结果即可。

5 结果可视化和模型评估
 

组合预测,加载各模型的预测结果

5.1 结果可视化

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第11张图片

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第12张图片

5.2 模型评估

由分量预测结果可见,前7个分量在CNN-LSTM预测模型下拟合效果良好,分量9在ARIMA模型的预测下,拟合程度比较好,其他低频分量拟合效果弱一点,调整参数可增强拟合效果。

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第13张图片

代码、数据如下:

CEEMDAN +组合预测模型(CNN-LSTM + ARIMA)_第14张图片

你可能感兴趣的:(时间序列预测,lstm,cnn,机器学习)