%% 主程序 WOA-BiLSTM,鲸鱼算法优化双向长短期记忆神经网络预测
% 初始化程序
clc;clear;close all;format compact
%%
data = xlsread('data.xlsx', 'Sheet1');
n=7;
[x,y]=data_process(data,n);%前n个时刻 预测下一个时刻
input =x; % 输入数据
output=y; % 输出数据
% load analysis modes
% 预设鲸鱼优化算法的参数
popsize = 5; %种群数量
maxgen = 20; % WOA最大的迭代次数
dim = 3; % 优化的自变量个数 ,依次为BiLSTM的第一和第二隐含层节点数,最大训练代数,初始学习率
%输入输出数据
L = size(output, 1); %样本总数
% testNumber = round(L*0.2); %设置四个样本测试
testNumber =20; %设置四个样本测试
trainNumber = L - testNumber; %训练样本数量
% 划分训练集和测试集
p_train = input(1:trainNumber, :)';
t_train = output(1:trainNumber, :)';
% 测试集
p_test = input(trainNumber+1:trainNumber+testNumber,:)';
t_test = output(trainNumber+1:trainNumber+testNumber,:)';
%% 归一化和元胞数组处理
[pn_train ,ps]= mapminmax(p_train);
[tn_train, ts] = mapminmax(t_train);
%测试集的归一化
pn_test = mapminmax('apply', p_test, ps);
tn_test = mapminmax('apply', t_test, ts);
for i = 1:length(t_train)
P_train{i,1} = pn_train(:,i);
end
for i = 1:length(t_test)
P_test{i,1} = pn_test(:,i);
end
%% 归一化和元胞数组处理p 4; % 优化的自变量个数 ,依次为BiLSTM的第一和第二隐含层节点数,最大训练代数,初始学习率
lb = [1, 1, 0.001]; % 下限
ub = [10,20, 0.01]; % 上限
% initialize position vector and score for the leader,初始化位置向量和领导者得分
Leader_pos=zeros(1,dim);
Leader_score=inf; %change this to -inf for maximization problems,将此更改为-inf以获得最大化问题,Inf无穷大
%Initialize the positions of search agents
Positions=initialization(popsize,dim,ub,lb);%Positions,存放数个个体的多维位置。
Convergence_curve=zeros(1,maxgen);%Convergence_curve收敛曲线
t=1;% Loop counter
% Main loop
while t<maxgen+1 % 首先 迭代次数的while循环 为2 也就是鲸鱼群体会进化2代
disp(['current iteration is: ', num2str(t)])
for i=1:size(Positions,1)%对每个个体一个一个检查是否越界 % 种群规模是2 所以嵌套了2次训练
% Return back the search agents that go beyond the boundaries of
% the search space,返回超出搜索空间边界的搜索代理
Flag4ub=Positions(i,:)>ub;
Flag4lb=Positions(i,:)<lb;
Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;%超过最大值的设置成最大值,超过最小值的设置成最小值
% 评估个体适应度,会调用func.m子函数,把个体位置坐标赋给BiLSTM参数中,执行的训练
% Calculate objective function for each search agent,目标函数值的计算
[fitness,net]=func(Positions(i,:),p_train,P_train,P_test, tn_train,ts,t_train,t_test);
if fitness<Leader_score % Change this to > for maximization problem
Leader_score=fitness; % Update alpha
Leader_pos=Positions(i,:);
net1 = net;
end
end
a=2-t*((2)/maxgen); % a decreases linearly fron 2 to 0 in Eq. (2.3)
% a2 linearly dicreases from -1 to -2 to calculate t in Eq. (3.12),有疑问?
a2=-1+t*((-1)/maxgen);
% Update the Position of search agents,参数更新
for i=1:size(Positions,1)
r1=rand(); % r1 is a random number in [0,1]
r2=rand(); % r2 is a random number in [0,1]
A=2*a*r1-a; % Eq. (2.3) in the paper
C=2*r2; % Eq. (2.4) in the paper
b=1; % parameters in Eq. (2.5)
l=(a2-1)*rand+1; % parameters in Eq. (2.5)
p = rand(); % p in Eq. (2.6)
for j=1:size(Positions,2)%对每一个个体地多维度进行循环运算
if p<0.5%收缩包围机制
if abs(A)>=1
rand_leader_index = floor(popsize*rand()+1);%floor将 X 的每个元素四舍五入到小于或等于该元素的最接近整数
X_rand = Positions(rand_leader_index, :);
D_X_rand=abs(C*X_rand(j)-Positions(i,j)); % Eq. (2.7)
Positions(i,j)=X_rand(j)-A*D_X_rand; % Eq. (2.8)
elseif abs(A)<1
D_Leader=abs(C*Leader_pos(j)-Positions(i,j)); % Eq. (2.1)
Positions(i,j)=Leader_pos(j)-A*D_Leader; % Eq. (2.2)
end
elseif p>=0.5%螺旋更新位置
distance2Leader=abs(Leader_pos(j)-Positions(i,j));
% Eq. (2.5)
Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);
end
end
end
Convergence_curve(t)=Leader_score;
t=t+1;
disp(t)
end
figure;
plot(Convergence_curve,'b-','LineWidth',1.0)
grid on
xlabel('进化代数')
ylabel('最佳适应度')
title('WOA优化过程曲线')
disp('WOA优化BiLSTM的结果:')
disp(strcat('最优参数: ', num2str([round(Leader_pos(1:2)),Leader_pos(3)])))
disp(strcat('最佳适应度: ', num2str(Leader_score)))
%% 将WOA优化后的参数赋给BiLSTM神经网络 while循环结束之后 优化完的最佳参数付给BiLSTM 再次训练
% 参数设置
numFeatures = size(p_train, 1); %输入层节点
numHiddenUnits1 = round(Leader_pos(1)); % 第一隐含层节点
numResponses = 1; %全连接层节点(等于标签的数量)
%% 创建网络
layers = [ ...
sequenceInputLayer(numFeatures)
bilstmLayer(numHiddenUnits1,'OutputMode','last','name','hidden1')
dropoutLayer(0.2,'name','dropout_1') %隐藏层1权重丢失率,防止过拟合
fullyConnectedLayer(numResponses,'name','fullconnect')
regressionLayer('name','out')]; % %回归层
%% 参数设定
%指定训练选项,求解器设置为adam
options = trainingOptions('adam', ... %优化算法
'MaxEpochs',round(Leader_pos(2)), ... %遍历样本最大循环数
'GradientThreshold',1, ... %梯度阈值
'InitialLearnRate',Leader_pos(3), ... %初始学习率
'LearnRateSchedule','piecewise', ... %学习率计划
'LearnRateDropPeriod',100, ... %50个epoch后学习率更新
'LearnRateDropFactor',0.01, ... % 通过乘以因子 0.1 来降低学习率
'MiniBatchSize',100,... % 批处理样本大小
'Verbose',1, ... %命令控制台是否打印训练过程
'Plots','training-progress');
%% 训练BiLSTM
% net = trainNetwork(P_train,tn_train',layers,options);
net = net1;
%% 测试集预测
testn_simu = predict(net,P_test);
test_simu= mapminmax('reverse',testn_simu', ts);
disp(' ')
disp('WOA-BiLSTM神经网络预测性能分析:')
[e, ape]=caculate_perf(t_test, test_simu);
rmse=sqrt(mean( (test_simu - t_test).^2));
%% 作图分析
%%真实值与预测值误差比较
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
figure
plot(test_simu,'-s','Color',[0 0 255]./255,'linewidth',1,'Markersize',5,'MarkerFaceColor',[0 0 255]./255)
hold on
plot(t_test,'-o','Color',[0 0 0]./255,'linewidth',0.8,'Markersize',4,'MarkerFaceColor',[0 0 0]./255)
legend('WOA-BiLSTM预测测试数据','实际分析数据','Location','NorthWest','FontName','华文宋体');
title('WOA-BiLSTM模型预测结果及真实值','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体');
ylabel('数值','fontsize',12,'FontName','华文宋体');
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
figure
bar((test_simu - t_test))
legend('WOA-BiLSTM模型测试集误差','Locatio
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆网络时间序列预测(完整程序和数据) Matlab实现鲸鱼算法优化双向长短期记忆网络时间序列预测(完整程序和数据) 基于鲸鱼算法优化双向长短期记忆网络(WOA-BiLSTM)的时间序列预测。 优化参数为学习率,隐藏层节点个数,正则化参数,要求2018b及以上版本,matlab代码。
资源推荐
资源详情
资源评论
收起资源包目录
时序预测:WOA-BiLSTM.zip (10个子文件)
initialization.m 627B
3.png 28KB
caculate_perf.m 340B
1.png 25KB
MainWOA_BiLSTMTS.m 8KB
4.png 20KB
data_process.m 174B
data.xlsx 20KB
2.png 51KB
func.m 2KB
共 10 条
- 1
资源评论
- TOTOBOYY2023-06-04资源内容详细,总结地很全面,与描述的内容一致,对我启发很大,学习了。
- sjy09172024-06-10发现一个超赞的资源,赶紧学习起来,大家一起进步,支持!
- 2301_768844202024-02-05超赞的资源,感谢资源主分享,大家一起进步!
机器学习之心
- 粉丝: 2w+
- 资源: 1095
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 毕业设计A052-基于Java的健身房管理系统的设计与实现
- 模型预测电流控制-广义双矢量
- Python爬虫入门推荐+爬取商品数据进行数据分析+适用于测试、开发、运营等
- libusbK、libusb-win32、libwdi、USB视频设备 驱动安装包
- 江苏范特科技有限公司创投信息
- 上海零数科技有限公司创投信息
- 上海唯鲜良品食品科技有限公司创投信息
- 上海柚凡信息科技有限公司创投信息
- 上海域圆信息科技有限公司创投信息
- 上市公司财务指标数据集2023-2000年原始数据 含剔除金融STPT版本
- Qt中嵌入窗口,例如嵌入MainWindows、QWidget、QDialog等窗口
- matplotShowDataCSV2-最简单的数据绘图
- 深圳店匠科技有限公司创投信息
- 深圳莱芒生物科技有限公司创投信息
- 沈阳黛斯蓝伊莎生物科技有限公司创投信息
- 苏州引航生物科技有限公司创投信息
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功