Matlab实现EEMD-SSA-BiLSTM、EEMD-BiLSTM、SSA-BiLSTM、BiLSTM时序预测

文摘   教育   2024-11-23 21:58   广东  

时序预测 | Matlab实现EEMD-SSA-BiLSTM、EEMD-BiLSTM、SSA-BiLSTM、BiLSTM时序预测对比

请尊重原创劳动成果
转载请注明本文链接
及文章作者:机器学习之心

点击阅读原文或复制以下链接到浏览器获取文章完整源码和数据:
https://mbd.pub/o/bread/mbd-ZZmXlJ9p

预测效果

使用教程

1 基本介绍

1.Matlab实现EEMD-SSA-BiLSTM、EEMD-BiLSTM、SSA-BiLSTM、BiLSTM时间序列预测对比,集合经验模态分解结合麻雀算法优化双向长短期记忆神经网络、集合经验模态分解结合双向长短期记忆神经网络、麻雀算法优化双向长短期记忆神经网络、双向长短期记忆神经网络时间序列预测对比。

2.EEMD-SSA-BiLSTM是一种基于集合经验模态分解(EEMD)、麻雀算法(SSA)和双向长短期记忆神经网络(BiLSTM)的时间序列预测方法;

首先,使用EEMD方法对原始时间序列进行分解,得到多个固有模态函数(IMF)。然后,使用SSA算法对每个IMF进行优化,得到最优的模型参数。最后,将所有IMF的预测结果相加得到最终的预测结果。.EEMD-SSA-BiLSTM方法的优点是能够充分挖掘时间序列的非线性和非平稳特征,并且能够自适应地对每个IMF进行优化,提高了预测的准确性和鲁棒性,可以应用于各种时间序列预测问题,例如股票价格预测、气象数据预测、交通流量预测等。

3.运行环境Matlab2018b及以上,运行每个子文件夹的main即可,excel数据,方便替换;

2 网络结构

设置网络参数




fs=1;%计算每个IMF分量及最后一个剩余分量residual与原始信号的相关性[m,n]=size(c);% %size()函数返回矩阵的行数和列数%% 画出分解图%画出每个IMF分量及最后一个剩余分量residual的图形figure(1)subplot(m+1,1,1) %m=5,分解得到5个IMF分量plot(t,f)%set(gca,'fontname','times New Roman')%表明字体等,可不用%set(gca,'fontsize',14.0)ylabel(['原始信号'])%画出imf[i]的图形for i=1:m-1subplot(m+1,1,i+1);set(gcf,'color','w')plot(t,c(i,:),'k')set(gca,'fontname','times New Roman')%set(gca,'fontsize',14.0)ylabel(['imf',int2str(i)]) %显示IMF1,2,3,4end%画残余分量figure(1)subplot(m+1,1,m+1);set(gcf,'color','w')plot(t,c(m,:),'k')set(gca,'fontname','times New Roman')%set(gca,'fontsize',14.0)ylabel('res')%% 分解完成imf=c(2:end,:); %取出imf分量%% EEMD-SSA-BiLSTM预测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));

完整代码

注意:

class
% @author : 机器学习之心
% 完整代码:https://mbd.pub/o/bread/mbd-ZZmXlJ9p

% @author : 机器学习之心

end

属实不易,如果有用请留个叭~

未经允许本代码请勿作商业用途!!!


机器学习之心HML
机器学习和深度学习时序、回归、分类和聚类等程序设计与案例分析,CSDN博主机器学习之心,知乎、B站同名,由于博主公众号名称被别人占用,故加了HML,此号是官方账号,其余打着本人旗号做事本人概不负责,本人QQ1153460737。
 最新文章