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

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

目录

    • [时序预测 | Matlab实现EEMD-SSA-BiLSTM、EEMD-BiLSTM、SSA-BiLSTM、BiLSTM时间序列预测对比](#时序预测 | Matlab实现EEMD-SSA-BiLSTM、EEMD-BiLSTM、SSA-BiLSTM、BiLSTM时间序列预测对比)

预测效果




基本介绍

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数据,方便替换;

程序设计

  • 完整程序和数据下载方式:私信博主回复Matlab实现EEMD-SSA-BiLSTM、EEMD-BiLSTM、SSA-BiLSTM、BiLSTM时序预测对比
clike 复制代码
%% 采用ssa优化
[x ,fit_gen,process]=ssaforlstm(XTrain,YTrain,XTest,YTest);%分别对隐含层节点 训练次数与学习率寻优
%% 参数设置
pop=5; % 种群数
M=20; % 最大迭代次数
%初始化种群
for i = 1 : pop
    for j=1:dim
        if j==1%除了学习率 其他的都是整数
            x( i, j ) = (ub(j)-lb(j))*rand+lb(j);
        else
            x( i, j ) = round((ub(j)-lb(j))*rand+lb(j));
        end
    end
    fit( i )=fitness(x(i,:),P_train,T_train,P_test,T_test);
end
pFit = fit;
pX = x;
fMin=fit(1);
bestX = x( i, : );

for t = 1 : M
    
    [ ~, sortIndex ] = sort( pFit );% Sort.从小到大
    [fmax,B]=max( pFit );
    worse= x(B,:);
    r2=rand(1);
    %%%%%%%%%%%%%5%%%%%%这一部位为发现者(探索者)的位置更新%%%%%%%%%%%%%%%%%%%%%%%%%
    if(r2<0.8)%预警值较小,说明没有捕食者出现
        for i = 1 : pNum  %r2小于0.8的发现者的改变(1-20)                                                 % Equation (3)
            r1=rand(1);
            x( sortIndex( i ), : ) = pX( sortIndex( i ), : )*exp(-(i)/(r1*M));%对自变量做一个随机变换
            x( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );%对超过边界的变量进行去除
            
            fit(  sortIndex( i ) )=fitness(x(sortIndex( i ),:),P_train,T_train,P_test,T_test);
        end
    else   %预警值较大,说明有捕食者出现威胁到了种群的安全,需要去其它地方觅食
        for i = 1 : pNum   %r2大于0.8的发现者的改变
            x( sortIndex( i ), : ) = pX( sortIndex( i ), : )+randn(1)*ones(1,dim);
            x( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );
            
            fit(  sortIndex( i ) )=fitness(x(sortIndex( i ),:),P_train,T_train,P_test,T_test);
            
        end
        
    end
    [ ~, bestII ] = min( fit );
    bestXX = x( bestII, : );
    %%%%%%%%%%%%%5%%%%%%这一部位为加入者(追随者)的位置更新%%%%%%%%%%%%%%%%%%%%%%%%%
    for i = ( pNum + 1 ) : pop     %剩下20-100的个体的变换                % Equation (4)
        %         i
        %         sortIndex( i )
        A=floor(rand(1,dim)*2)*2-1;
        if( i>(pop/2))%这个代表这部分麻雀处于十分饥饿的状态(因为它们的能量很低,也是是适应度值很差),需要到其它地方觅食
            x( sortIndex(i ), : )=randn(1,dim).*exp((worse-pX( sortIndex( i ), : ))/(i)^2);
        else%这一部分追随者是围绕最好的发现者周围进行觅食,其间也有可能发生食物的争夺,使其自己变成生产者
            x( sortIndex( i ), : )=bestXX+(abs(( pX( sortIndex( i ), : )-bestXX)))*(A'*(A*A')^(-1))*ones(1,dim);
        end
        x( sortIndex( i ), : ) = Bounds( x( sortIndex( i ), : ), lb, ub );%判断边界是否超出
        fit(  sortIndex( i ) )=fitness(x(sortIndex( i ),:),P_train,T_train,P_test,T_test);
    end
    %%%%%%%%%%%%%5%%%%%%这一部位为意识到危险(注意这里只是意识到了危险,不代表出现了真正的捕食者)的麻雀的位置更新%%%%%%%%%%%%%%%%%%%%%%%%%
    c=randperm(numel(sortIndex));%%%%%%%%%这个的作用是在种群中随机产生其位置(也就是这部分的麻雀位置一开始是随机的,意识到危险了要进行位置移动,
    %处于种群外围的麻雀向安全区域靠拢,处在种群中心的麻雀则随机行走以靠近别的麻雀)
    b=sortIndex(c(1:pop));
    for j =  1  : length(b)      % Equation (5)
        if( pFit( sortIndex( b(j) ) )>(fMin) ) %处于种群外围的麻雀的位置改变
            x( sortIndex( b(j) ), : )=bestX+(randn(1,dim)).*(abs(( pX( sortIndex( b(j) ), : ) -bestX)));
        else
            %处于种群中心的麻雀的位置改变
            x( sortIndex( b(j) ), : ) =pX( sortIndex( b(j) ), : )+(2*rand(1)-1)*(abs(pX( sortIndex( b(j) ), : )-worse))/ ( pFit( sortIndex( b(j) ) )-fmax+1e-50);
        end
        x( sortIndex(b(j) ), : ) = Bounds( x( sortIndex(b(j) ), : ), lb, ub );
        fit(  sortIndex( b(j)  ) )=fitness(x(sortIndex( b(j) ),:),P_train,T_train,P_test,T_test);
        
    end

参考资料

[1] https://blog.csdn.net/article/details/126072792?spm=1001.2014.3001.5502

[2] https://blog.csdn.net/article/details/126044265?spm=1001.2014.3001.5502

[3] https://blog.csdn.net/article/details/126043107?spm=1001.2014.3001.5502

相关推荐
IT猿手20 天前
基于双向长短期记忆网络(BiLSTM)的时间序列数据预测,15个输入1个输出,可以更改数据集,MATLAB代码
开发语言·深度学习·机器学习·matlab·lstm·bilstm
胖哥真不错21 天前
Python基于TensorFlow实现双向长短时记忆循环神经网络加注意力机制回归模型(BiLSTM-Attention回归算法)项目实战
python·tensorflow·attention·项目实战·bilstm·双向长短时记忆循环神经网络·注意力机制回归模型
机器学习之心23 天前
速来!未发表!DTW-Kmeans-Transformer-BiLSTM组合模型!时序聚类+状态识别!
transformer·kmeans·聚类·bilstm·时序聚类·状态识别·dtw-kmeans
微学AI1 个月前
机器学习实战27-基于双向长短期记忆网络 BiLSTM 的黄金价格模型研究
人工智能·机器学习·bilstm
r_martian2 个月前
基于LSTM的温度时序预测
人工智能·rnn·机器学习·lstm·时序预测
机器学习之心2 个月前
强推!创新直发核心!时序分解+优化组合+模型对比!VMD-SSA-Transformer-BiLSTM多变量时间序列预测
transformer·bilstm·多变量时间序列预测·vmd-ssa
机器学习之心3 个月前
时序预测 | 基于WTC+transformer时间序列组合预测模型(pytorch)
pytorch·深度学习·transformer·时序预测
deardao5 个月前
扩散模型在时间序列预测中的兴起
人工智能·机器学习·生成·时序预测·扩散
打酱油的葫芦娃7 个月前
基于MLP算法实现交通流量预测(Pytorch版)
算法·时序预测
机器学习之心7 个月前
锂电池寿命预测 | Matlab基于BiLSTM双向长短期记忆神经网络的锂电池寿命预测
双向长短期记忆神经网络·bilstm·锂电池寿命预测