✅作者简介:热爱科研的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的波高时间序列预测模型.