LSTM时序预测 | 基于WOA-BiLSTM鲸鱼算法优化双向长短期记忆网络时间序列预测MATLAB源码

​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

时间序列流量的预测问题是近年来机器学习的一个热点问题,通过改变长短期记忆网络(LSTM)层数,网络层神经元的个数,网络层之间的连接方式,特殊网络层的应用等网络结构以及优化器和损失函数的选择可以极大地提高预测的精度.本文提出WOA-BiLSTM算法,该算法是在传统LSTM算法上进行改进的单一模型,模型设计的复杂度低,可以提高机器学习的效率.实验结果表明,与传统模型相比,该模型具有较好的泛化能力.

1.1 鲸鱼算法

基本鲸鱼优化算法是由Mirjalili等从座头鲸的捕食行为中,产生灵感,并加以改进,提出的一种新型元启发式算法。数学模型来源于3种捕食行为:环绕式捕食、螺旋气泡网捕食和随机搜索捕食。

1.1环绕式捕食

WOA算法假设当前最佳鲸群个体位置为最接近目标猎物的位置。这种捕食行为的数学表达式为:

1.2螺旋气泡网捕食

螺旋气泡网捕食行为简化为收缩和螺旋上升,这两种行为同时进行,算法中以概率为选择阈值,决定采用何种方式进行迭代,数学模型如下:

1.3随机搜索捕食

 当系数向量的值不在之间,则跳出已经找到的最优个体,重新寻找新的随机个体,其数学模型如下:

2 双向长短期记忆网络(Bi-LSTM)

一般来说,经典 LSTM 网络是在一个方向上传输信息,即只能使用过去的信息,而没有未来的信息。Bi-LSTM 模型是在原来的 LSTM 基础上增加了一个反向 LSTM 层,即正向和反向 LSTM 组合形成一个 Bi-LSTM 网络,其结构如图 2.6 所示。正向 LSTM可以提取输入序列过去的数据信息,反向 LSTM 可以提取输入序列未来的数据信息,实现对时间序列的正向和反向 LSTM 的双重训练,进一步提高全局和完整的特征提取能

⛄ 部分代码

function [Leader_pos,Leader_score,Convergence_curve,predict_value]=WOA(SearchAgents_no,Max_iter,lb,ub,dim,fobj)

%% 初始化

Leader_pos=zeros(1,dim);

Leader_score=inf;

SearchAgents_no=5;

for i=1:SearchAgents_no%随机初始化速度,随机初始化位置

    for j=1:dim

        if j==dim%除了学习率 其他的都是整数

            Positions( i, j ) = (ub(j)-lb(j))*rand+lb(j);

        else

            Positions( i, j ) = round((ub(j)-lb(j))*rand+lb(j));

        end

    end

end

Convergence_curve=zeros(1,Max_iter);

%% 主循环

for t=1:Max_iter

    a=2-t*((2)/Max_iter);

    a2=-1+t*((-1)/Max_iter);

    lambda=3;

    mu=2;

    adapative_p= 1-(1/(lambda+mu)*(lambda*t^lambda+mu*mu^lambda)/(Max_iter^lambda));

    for i=1:size(Positions,1)

        r1=rand();

        r2=rand();

        A=2*a*r1-a;

        C=2*r2;

        b=1;

        l=(a2-1)*rand+1;

        p = rand();

        for j=1:size(Positions,2)

            if p<0.5

                if abs(A)>=1

                    rand_leader_index = floor(SearchAgents_no*rand()+1);

                    X_rand = Positions(rand_leader_index, :);

                    D_X_rand=abs(C*X_rand(j)-Positions(i,j));

                    Positions(i,j)=X_rand(j)-A*D_X_rand;

                elseif abs(A)<1

                    D_Leader=abs(C*Leader_pos(j)-Positions(i,j));

                    Positions(i,j)=Leader_pos(j)-A*D_Leader;

                end

            elseif p>=0.5

                distance2Leader=abs(Leader_pos(j)-Positions(i,j));

                Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);

            end

        end

         Positions(i, : ) = Bounds( Positions(i, : ), lb, ub );%对超过边界的变量进行去除

%         fit=fboj(Positions(i,:));

         [fit,predict_value_LSTM]=fobj(Positions(i,:));

        %  更新

        if fit<Leader_score

            Leader_score=fit;

            Leader_pos=Positions(i,:);

             predict_value=predict_value_LSTM;

        end

    end

    Convergence_curve(t)=Leader_score;

    process(t,:)=Leader_pos;

    disp(['WOA,第',num2str(t),'代,RMSE=',num2str(Leader_score)])

%     t,Leader_score,Leader_pos

end

⛄ 运行结果

⛄ 参考文献

[1] 欧阳红兵, 黄亢, 闫洪举. 基于LSTM神经网络的金融时间序列预测[J]. 中国管理科学, 2020(4):9.

[2] 颜靖华侯苗苗. 基于LSTM网络的盗窃犯罪时间序列预测研究[J]. 现代图书情报技术, 2020, 004(011):84-91.

[3] 胡向阳, 孙宪坤, 尹玲,等. 基于多变量LSTM的GPS坐标时间序列预测模型[J]. 传感器与微系统, 2021, 040(003):40-43.

[4] 郭佳丽, 邢双云, 栾昊,等. 基于改进的LSTM算法的时间序列流量预测[J]. 南京信息工程大学学报, 2021, 013(005):571-575.

[5] 胡向阳, 孙宪坤, 尹玲,等. 基于多变量LSTM的GPS坐标时间序列预测模型[J].  2021.

[6] 詹可, 朱仁传. 基于EMD-LSTM的波高时间序列预测模型.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值