时序预测 | MATLAB实现EEMD-LSTM、LSTM集合经验模态分解结合长短期记忆神经网络时间序列预测对比
目录
效果一览
基本介绍
时序预测 | MATLAB实现EEMD-LSTM、LSTM集合经验模态分解结合长短期记忆神经网络时间序列预测对比。
1.MATLAB实现EEMD-LSTM、LSTM时间序列预测对比;
2.时间序列预测 就是先eemd把原输入全分解变成很多维作为输入 再输入LSTM预测 ;
3.运行环境Matlab2018b及以上,输出RMSE、MAPE、MAE等多指标对比,
先运行main1_eemd_test,进行eemd分解;再运行main2_lstm、main3_eemd_lstm;再运行main4_compare,两个模型对比。
模型搭建
EEMD-LSTM和LSTM集合是两种用于时间序列预测的方法,它们结合了经验模态分解 (Empirical Mode Decomposition, EMD) 和长短期记忆神经网络 (Long Short-Term Memory, LSTM)。这两种方法都具有一定的优势和适用场景,下面对它们进行对比。
EEMD-LSTM:
EEMD是一种数据分解方法,通过将时间序列分解成多个固有模态函数 (Intrinsic Mode Functions, IMF) 和一个剩余项,将非线性和非平稳的时间序列转化为多个平稳的子序列。
EEMD能够将时间序列的相关信息提取到不同的IMF中,每个IMF代表了时间序列中的不同频率成分。
LSTM是一种适用于序列数据的循环神经网络,能够捕捉长期依赖关系,适用于处理时间序列数据。
EEMD-LSTM的基本思路是将原始时间序列通过EEMD进行分解,然后将每个IMF作为LSTM的输入,利用LSTM模型对每个IMF进行预测,最后将预测结果合并得到最终的预测结果。通过构建多个独立的LSTM模型,每个模型都有不同的初始化条件和参数设置。每个LSTM模型都会对时间序列进行训练和预测,最后将它们的预测结果进行综合,例如通过平均或加权平均的方式得到最终的预测结果。优势在于通过建立多个模型,可以利用不同的初始化条件和参数组合,增加了模型的多样性,提高了整体的预测准确性。
对比:EEMD-LSTM利用EEMD将时间序列分解成不同频率的子序列,然后利用LSTM对每个子序列进行预测,最后将预测结果合并。这种方法能够更好地处理非线性和非平稳的时间序列,能够提取出不同频率成分的信息。然而,EEMD的分解过程可能会引入一些噪声,并且需要额外的计算步骤。
LSTM集合通过构建多个LSTM模型,利用不同的初始化条件和参数组合,增加了模型的多样性,提高了预测准确性。这种方法相对简单,不需要进行数据分解,适用于一般的时间序列预测任务。
程序设计
- 完整程序和数据获取方式1:私信博主回复MATLAB实现EEMD-LSTM、LSTM集合经验模态分解结合长短期记忆神经网络时间序列预测对比,同等价值程序兑换;
- 完整程序和数据下载方式2(资源处直接下载):MATLAB实现EEMD-LSTM、LSTM集合经验模态分解结合长短期记忆神经网络时间序列预测对比;
- 完整程序和数据下载方式3(订阅《LSTM长短期记忆神经网络》专栏,同时可阅读《LSTM长短期记忆神经网络》专栏内容,数据订阅后私信我获取):MATLAB实现EEMD-LSTM、LSTM集合经验模态分解结合长短期记忆神经网络时间序列预测对比,专栏外只能获取该程序。
clike
%% 创建混合LSTM网络架构
% 输入特征维度
numFeatures = f_;
% 输出特征维度
numResponses = 1;
FiltZise = 10;
% 创建"LSTM"模型
layers = [...
% 输入特征
sequenceInputLayer([numFeatures 1 1],'Name','input')
sequenceFoldingLayer('Name','fold')
% LSTM特征学习
lstmLayer(50,'Name','lstm1','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
% LSTM输出
lstmLayer(optVars.NumOfUnits,'OutputMode',"last",'Name','bil4','RecurrentWeightsInitializer','He','InputWeightsInitializer','He')
dropoutLayer(0.25,'Name','drop3')
% 全连接层
fullyConnectedLayer(numResponses,'Name','fc')
regressionLayer('Name','output') ];
layers = layerGraph(layers);
layers = connectLayers(layers,'fold/miniBatchSize','unfold/miniBatchSize');
%% LSTM训练选项
% 批处理样本
MiniBatchSize =128;
% 最大迭代次数
MaxEpochs = 500;
options = trainingOptions( 'adam', ...
'MaxEpochs',500, ...
'GradientThreshold',1, ...
'InitialLearnRate',optVars.InitialLearnRate, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',400, ...
'LearnRateDropFactor',0.2, ...
'L2Regularization',optVars.L2Regularization,...
'Verbose',false, ...
'Plots','none');
%% 训练混合网络
net = trainNetwork(XrTrain,YrTrain,layers,options);
参考资料
[1] https://blog.csdn.net/kjm13182345320/article/details/129036772?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/128690229