时序预测 | Matlab实现EEMD-SSA-LSTM、EEMD-LSTM、SSA-LSTM、LSTM时间序列预测对比
请尊重原创劳动成果
转载请注明本文链接
及文章作者:机器学习之心
预测效果
使用教程
1 基本介绍
1.Matlab实现EEMD-SSA-LSTM、EEMD-LSTM、SSA-LSTM、LSTM时间序列预测对比,集合经验模态分解结合麻雀算法优化长短期记忆神经网络、集合经验模态分解结合长短期记忆神经网络、麻雀算法优化长短期记忆神经网络、长短期记忆神经网络时间序列预测对比。
2.EEMD-SSA-LSTM是一种基于集合经验模态分解(EEMD)、麻雀算法(SSA)和长短期记忆神经网络(LSTM)的时间序列预测方法;
首先,使用EEMD方法对原始时间序列进行分解,得到多个固有模态函数(IMF)。然后,使用SSA算法对每个IMF进行优化,得到最优的模型参数。最后,将所有IMF的预测结果相加得到最终的预测结果。.EEMD-SSA-LSTM方法的优点是能够充分挖掘时间序列的非线性和非平稳特征,并且能够自适应地对每个IMF进行优化,提高了预测的准确性和鲁棒性,可以应用于各种时间序列预测问题,例如股票价格预测、气象数据预测、交通流量预测等。
3.运行环境Matlab2018b及以上,运行每个子文件夹的main即可。
2 网络结构
设置网络参数
%% 分解完成
imf=c(2:end,:); %取出imf分量
%% EEMD-SSA-LSTM预测
pre_result2=[];
pre_result1=[];
for i=1:size(imf,1)
disp(['对第',num2str(i),'个分量建模'])
[x,y]=data_process(imf(i,:),step); %步长为12
%归一化
%% 划分数据
n=size(x,1);
m=round(n*0.7); %前70%训练,对最后30%进行预测
P_train=x(1:m,:)';
P_test=x(m+1:end,:)';
T_train=y(1:m,:)';
T_test=y(m+1:end,:)';
%% 划分训练集和测试集
M = size(P_train, 2);
N = size(P_test, 2);
%% 数据归一化
[P_train, ps_input] = mapminmax(P_train, 0, 1);
P_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%% 数据平铺
% 将数据平铺成1维数据只是一种处理方式
% 也可以平铺成2维数据,以及3维数据,需要修改对应模型结构
% 但是应该始终和输入层数据结构保持一致
P_train = double(reshape(P_train,step, 1, 1, M));
P_test = double(reshape(P_test ,step, 1, 1, N));
t_train = t_train';
t_test = t_test' ;
%% 数据格式转换
for j = 1 : M
p_train{j, 1} = P_train(:, :, 1, j);
end
for k = 1 : N
p_test{k, 1} = P_test( :, :,1, k);
end
%% 优化函数
fobj = @(x)fical(x);
%% 优化算法参数设置
pop = 5; % 数量
Max_iter = 10; % 最大迭代次数
dim = 3; % 优化参数个数
lb = [1e-5, 32, 1e-5]; % 参数取值下界(学习率,隐藏层节点,正则化系数)
ub = [1e-1, 128, 1e-1]; % 参数取值上界(学习率,隐藏层节点,正则化系数)
完整代码
注意:
class
% @author : 机器学习之心
% 完整代码:https://mbd.pub/o/bread/mbd-ZZeVk5dq
% @author : 机器学习之心
end
完
属实不易,如果有用请留个赞
叭~
未经允许本代码请勿作商业用途!!!