%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 导入数据
res = xlsread('数据集.xlsx');
%% 数据分析
num_size = 0.7; % 训练集占数据集比例
outdim = 1; % 最后一列为输出
num_samples = size(res, 1); % 样本个数
res = res(randperm(num_samples), :); % 打乱数据集(不希望打乱时,注释该行)
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征维度
%% 划分训练集和测试集
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);
P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
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);
%% 网络参数设置
num_inputs = size(p_train, 1); % 输入层维度
num_hidden = 6; % 隐藏层维度
num_output = outdim; % 输出层维度
dim = (num_inputs + 1) * num_hidden + (num_hidden + 1) * num_output; % 优化参数个数
%% 建立网络
net = newff(p_train, t_train, num_hidden);
%% 设置训练参数
net.trainParam.epochs = 1000; % 训练次数
net.trainParam.goal = 1e-9; % 目标误差
net.trainParam.lr = 0.01; % 学习率
net.trainParam.showWindow = 0; % 关闭窗口
%% 优化算法参数设置
SearchAgents_no = 5; % 狼群数量
Max_iteration = 30; % 最大迭代次数
lb = -1.0 * ones(1, dim); % 参数取值下界
ub = 1.0 * ones(1, dim); % 参数取值上界
%% 优化算法初始化
Alpha_pos = zeros(1, dim); % 初始化Alpha狼的位置
Alpha_score = inf; % 初始化Alpha狼的目标函数值,将其更改为-inf以解决最大化问题
Beta_pos = zeros(1, dim); % 初始化Beta狼的位置
Beta_score = inf; % 初始化Beta狼的目标函数值 ,将其更改为-inf以解决最大化问题
Delta_pos = zeros(1, dim); % 初始化Delta狼的位置
Delta_score = inf; % 初始化Delta狼的目标函数值,将其更改为-inf以解决最大化问题
%% 初始化搜索狼群的位置
Positions = initialization(SearchAgents_no, dim, ub, lb);
%% 用于记录迭代曲线
Convergence_curve = zeros(1, Max_iteration);
%% 循环计数器
iter = 0;
%% 优化算法主循环
while iter < Max_iteration % 对迭代次数循环
for i = 1 : size(Positions, 1) % 遍历每个狼
% 返回超出搜索空间边界的搜索狼群
% 若搜索位置超过了搜索空间,需要重新回到搜索空间
Flag4ub = Positions(i, :) > ub;
Flag4lb = Positions(i, :) < lb;
% 若狼的位置在最大值和最小值之间,则位置不需要调整,若超出最大值,最回到最大值边界
% 若超出最小值,最回答最小值边界
Positions(i, :) = (Positions(i, :) .* (~(Flag4ub + Flag4lb))) + ub .* Flag4ub + lb .* Flag4lb;
% 计算适应度函数值
X = reshape(Positions(i, :), 1, dim);
fitness = (fitcal(X, num_hidden, p_train, t_train, net));
% 更新 Alpha, Beta, Delta
if fitness < Alpha_score % 如果目标函数值小于Alpha狼的目标函数值
Alpha_score = fitness; % 则将Alpha狼的目标函数值更新为最优目标函数值
Alpha_pos = Positions(i, :); % 同时将Alpha狼的位置更新为最优位置
end
if fitness > Alpha_score && fitness < Beta_score % 如果目标函数值介于于Alpha狼和Beta狼的目标函数值之间
Beta_score = fitness; % 则将Beta狼的目标函数值更新为最优目标函数值
Beta_pos = Positions(i, :); % 同时更新Beta狼的位置
end
if fitness > Alpha_score && fitness > Beta_score && fitness < Delta_score % 如果目标函数值介于于Beta狼和Delta狼的目标函数值之间
Delta_score = fitness; % 则将Delta狼的目标函数值更新为最优目标函数值
Delta_pos = Positions(i, :); % 同时更新Delta狼的位置
end
end
% 线性权重递减
wa = 2 - iter * ((2) / Max_iteration);
% 更新搜索狼群的位置
for i = 1 : size(Positions, 1) % 遍历每个狼
for j = 1 : size(Positions, 2) % 遍历每个维度
% 包围猎物,位置更新
r1 = rand; % r1 is a random number in [0,1]
r2 = rand; % r2 is a random number in [0,1]
A1 = 2 * wa * r1 - wa; % 计算系数A,Equation (3.3)
C1 = 2 * r2; % 计算系数C,Equation (3.4)
% Alpha 位置更新
D_alpha = abs(C1 * Alpha_pos(j) - Positions(i, j)); % Equation (3.5)-part 1
X1 = Alpha_pos(j) - A1 * D_alpha; % Equation (3.6)-part 1
r1 = rand; % r1 is a random number in [0,1]
r2 = rand; % r2 is a random number in [0,1]
A2 = 2 * wa * r1 - wa; % 计算系数A,Equation (3.3)
C2 = 2 *r2; % 计算系数C,Equation (3.4)
% Beta 位置更新
D_beta = abs(C2 * Beta_pos(j) - Positions(i, j)); % Equation (3.5)-part 2
X2 = Beta_pos(j) - A2 * D_beta; % Equation (3.6)-part 2
r1 = rand; % r1 is a random number in [0,1]
r2 = rand; % r2 is a random number in [0,1]
A3 = 2 *wa * r1 - wa; % 计算系数A,Equation (3.3)
C3 = 2 *r2; % 计算系数C,Equation (3.4)
% Delta 位置更新
D_delta = abs(C3 * Delta_pos(j) - Positions(i, j)); % Equation (3.5)-part 3
X3 = Delta_pos(j) - A3 * D_delta; % Equation (3.5)-part 3
% 位置更新
Positions(i, j) = (X1 + X2 + X3) / 3; % Equation (3.7)
end
end
% 更新迭代器
iter = iter + 1;
Convergence_curve(iter) = Alpha_score;
disp(['GWO current iteration is: ',num2str(iter), ', best fitness is: ', num2str(Alpha_score)]);
end
%% 获取最优权值和偏置
w1 = Alpha_pos(1 : num_inputs * num_hidden);
B1 = Alpha_pos(num_inputs * num_hidden + 1 : num_inputs * num_hidden + num_hidden);
w2 = Alpha_pos(num_inputs * num_hidden + num_hidden + 1 : num_inputs * num_hidden ...
+ num_hidden + num_hidden * num_output);
B2 = Alpha_pos(num_inputs * num_hidden + num_hidden + num_hidden * num_output + 1 : ...
num_inputs * num_hidden + num_hidden + num_hidden * num_output + num_output);
%% 网络赋值
net.Iw{1, 1} = reshape(w1, num_hidden, num_inputs);
net.Lw{2, 1} = reshape(w2, num_output, num_hidden);
net.b{1} = reshape(B1, num_hidden, 1);
net.b{2} = B2';
%% 打开训练窗口
net.trainParam.showWindow = 1; % 打开窗口
%% 网络训练
net = train(net, p_train, t_train);
%% 仿真预测
t_sim1 = sim(net, p_train);
t_sim2 = sim(net, p_test );
%% 数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
%% 均方根误差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);
%% 适应度曲线
figure;
plot(1 : length(Convergence_curve), Convergence_curve, 'LineWidth', 1.5);
title('适应度曲线', 'FontSize', 13);
xlabel('迭代次数', 'FontSize', 10);
ylabel('适应度值', 'FontSize', 10);
xlim([1, length(Convergence_curve)])
grid
%% 绘图
figure
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid
figure
plot(1: N, T_test, 'r-*', 1: N, T_sim2, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比'; ['RM
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
回归预测|基于灰狼优化BP神经网络的数据回归预测Matlab程序 GWO-BP 多特征输入单输出 1.程序已经调试好,一键运行出图和评价指标 2.数据是excel保存,只需替换即可运行属于你的实验结果 3.代码注释详细,可读性强,适合小白新手 4.在实际数据上效果不佳,需要微调参数 CSDN:机器不会学习CL 回归预测|基于灰狼优化BP神经网络的数据回归预测Matlab程序 GWO-BP 多特征输入单输出 1.程序已经调试好,一键运行出图和评价指标 2.数据是excel保存,只需替换即可运行属于你的实验结果 3.代码注释详细,可读性强,适合小白新手 4.在实际数据上效果不佳,需要微调参数 CSDN:机器不会学习CL 回归预测|基于灰狼优化BP神经网络的数据回归预测Matlab程序 GWO-BP 多特征输入单输出 1.程序已经调试好,一键运行出图和评价指标 2.数据是excel保存,只需替换即可运行属于你的实验结果 3.代码注释详细,可读性强,适合小白新手 4.在实际数据上效果不佳,需要微调参数 CSDN:机器不会学习CL
资源推荐
资源详情
资源评论
收起资源包目录
4_灰狼优化BP神经网络回归GWO-BP.zip (4个子文件)
4_灰狼优化BP神经网络回归GWO-BP
initialization.m 451B
fitcal.m 994B
main.m 9KB
数据集.xlsx 15KB
共 4 条
- 1
资源评论
机器不会学习CL
- 粉丝: 3317
- 资源: 71
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C语言的系统服务框架.zip
- (源码)基于Spring MVC和MyBatis的选课管理系统.zip
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功