改进的减法优化器算法优化BP神经网络---回归+分类两种案例

这篇具有很好参考价值的文章主要介绍了改进的减法优化器算法优化BP神经网络---回归+分类两种案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天采用前一阵改进最为成功的智能优化算法---融合黄金正弦的减法优化器算法(GSABO)优化BP神经网络。该算法不仅是2023年较新的算法,而且改进后的收敛速度和寻优精度都是极佳!点击链接跳转GSABO算法:融合黄金正弦,十种混沌映射,搞定!把把最优值,本文思路可用于所有智能算法的改进

文章一次性讲解两种案例,回归分类。回归案例中,作者选用了一个经典的股票数据。分类案例中,作者选用的是公用的UCI数据集。

BP神经网络初始的权值阈值都是随机生成的,因此不一定是最佳的。采用智能算法优化BP神经网络的权值阈值,使得输入与输出有更加完美的映射关系,以此来提升BP神经网络模型的精度。本文采用GSABO算法对BP神经网络的权值阈值进行优化,并应用于实际的回归和分类案例中。

01 股票预测案例

案例虽然介绍的是股票预测,但是GSABO-BP预测模型是通用的,大家根据自己的数据直接替换即可。

股票数据特征有:开盘价,盘中最高价,盘中最低价,收盘价等。预测值为股票价格。股票数据整理代码已写好,想换成自己数据的童鞋不需要理解此代码,替换数据即可。下面直接上标准BP的预测结果和GSABO-BP的预测结果。

标准BP模型预测结果

改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

可以看到标准BP神经网络的预测效果不是很理想,无法跟踪真实值偏差较大

GSABO-BP预测结果

可以看到GSABO-BP神经网络的预测值可以紧密跟随真实值,效果很好。

改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

将真实值,BP预测值和GSABO-BP预测值放在一起,效果更加明显。改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

接下来是一个GSABO优化前后的BP神经网络误差对比图。

改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

GSABO-BP的迭代曲线,以预测值和真实值的MSE为目标函数。

改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

GSABO-BP预测模型的评价:可以看到,GSABO-BP方法在股票预测案例中可以很好地进行股票价格预测。

02 分类案例

接下来是GSABO-BP的分类案例,采用的数据是UCI数据集中的Balancescale.mat数据,该数据一共分为三类。接下来看结果。

标准BP模型分类结果

混淆矩阵结果图:

简单说一下这个图该怎么理解。请大家横着看,每行的数据加起来是100%,每行的数据个数加起来就是测试集中第一类数据的真实个数。以第一行为例,测试集中一共有12个数据是属于第一类的,而12个数据中,有8个预测正确,有1个预测成了第2类,3个预测成了第三类。其他行均这样理解。

改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

下面这个图是另一种结果展现方式,在一些论文中会用这种方式展示结果。

改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

GSABO-BP分类结果:

改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

改进的减法优化器算法优化BP神经网络---回归+分类两种案例,算法,神经网络,回归,分类,人工智能

03 代码展示

%% 初始化
clear
close all
clc
warning off
rng(0)
load data.mat  %加载股票数据,这里直接替换自己的数据即可。
%% 数据归一化
[inputn,inputps]=mapminmax(input_train,0,1);
[outputn,outputps]=mapminmax(output_train);
inputn_test=mapminmax('apply',input_test,inputps);
%% 获取输入层节点、输出层节点个数
inputnum=size(input_train,1);
outputnum=size(output_train,1);
disp('/')
disp('神经网络结构...')
disp(['输入层的节点数为:',num2str(inputnum)])
disp(['输出层的节点数为:',num2str(outputnum)])
disp(' ')
disp('隐含层节点的确定过程...')


%确定隐含层节点个数
%采用经验公式hiddennum=sqrt(m+n)+a,m为输入层节点个数,n为输出层节点个数,a一般取为1-10之间的整数
MSE=1e+5; %初始化最小误差
for hiddennum=fix(sqrt(inputnum+outputnum))+1:fix(sqrt(inputnum+outputnum))+5
    %构建网络
    net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm');% 建立模型
    % 网络参数
    net.trainParam.epochs=1000;         % 训练次数
    net.trainParam.lr=0.01;                   % 学习速率
    net.trainParam.goal=0.000001;        % 训练目标最小误差
    net.trainParam.showWindow=0;  %隐藏仿真界面
    % 网络训练
    net=train(net,inputn,outputn);
    an0=sim(net,inputn);  %仿真结果,依旧采用训练集进行测试
    test_simu0=mapminmax('reverse',an0,outputps); %把仿真得到的数据还原为原始的数量级
    mse0=mse(test_simu0,output_train);  %仿真的均方误差
    disp(['隐含层节点数为',num2str(hiddennum),'时,训练集的均方误差为:',num2str(mse0)])


    %更新最佳的隐含层节点
    if mse0<MSE
        MSE=mse0;
        hiddennum_best=hiddennum;
    end
end
disp(['最佳的隐含层节点数为:',num2str(hiddennum_best),',训练集的均方误差为:',num2str(MSE)])


%% 构建最佳隐含层节点的BP神经网络
disp(' ')
disp('标准的BP神经网络:')
net0=newff(inputn,outputn,hiddennum_best,{'tansig','purelin'},'trainlm');% 建立模型
%网络参数配置
net0.trainParam.epochs=1000;         % 训练次数,这里设置为1000次
net0.trainParam.lr=0.01;                   % 学习速率,这里设置为0.01
net0.trainParam.goal=0.00001;                    % 训练目标最小误差,这里设置为0.0001
net0.trainParam.show=25;                % 显示频率,这里设置为每训练25次显示一次
net0.trainParam.mc=0.01;                 % 动量因子
net0.trainParam.min_grad=1e-6;       % 最小性能梯度
net0.trainParam.max_fail=6;               % 最高失败次数
% net0.trainParam.showWindow = false;
% net0.trainParam.showCommandLine = false;            %隐藏仿真界面
%开始训练
net0=train(net0,inputn,outputn);


%预测
an0=sim(net0,inputn_test); %用训练好的模型进行仿真
%预测结果反归一化与误差计算
test_simu0=mapminmax('reverse',an0,outputps); %把仿真得到的数据还原为原始的数量级
%误差指标
mse0=mse(output_test,test_simu0);
%% 标准BP神经网络作图
figure
plot(output_test,'b-','markerfacecolor',[0.5,0.5,0.9],'MarkerSize',6)
hold on
plot(test_simu0,'r--','MarkerSize',6)
legend('真实y','预测的y')
xlabel('样本数')
ylabel('股票价格')
title(['标准BP神经网络预测结果',newline,'MSE误差为:',num2str(mse0)])
disp(['标准神经网络测试集的均方误差为:',num2str(mse0)])


%% GSABO优化算法寻最优权值阈值
disp(' ')
disp('GSABO优化BP神经网络:')


net=newff(inputn,outputn,hiddennum_best,{'tansig','purelin'},'trainlm');% 建立模型


%网络参数配置
net.trainParam.epochs=1000;         % 训练次数,这里设置为1000次
net.trainParam.lr=0.01;                   % 学习速率,这里设置为0.01
net.trainParam.goal=0.00001;                    % 训练目标最小误差,这里设置为0.0001
net.trainParam.show=25;                % 显示频率,这里设置为每训练25次显示一次
net.trainParam.mc=0.01;                 % 动量因子
net.trainParam.min_grad=1e-6;       % 最小性能梯度
net.trainParam.max_fail=6;               % 最高失败次数
%% 初始化GSABO参数
popsize=10;   %初始种群规模
maxgen=30;   %最大进化代数
lb = -2;  %神经网络权值阈值的上下限
ub = 2;
numm = 2; %混沌系数
dim=inputnum*hiddennum_best+hiddennum_best+hiddennum_best*outputnum+outputnum;    %自变量个数
fobj = @fitness;
[Best_score,Best_pos,GSABO_curve]=GSABOforBP(numm,popsize,maxgen,lb,ub,dim,inputnum,hiddennum_best,outputnum,net,inputn,outputn,inputn_test,outputps,output_test);


%% 绘制进化曲线
figure
plot(GSABO_curve,'r-','linewidth',2)
xlabel('进化代数')
ylabel('均方误差')
legend('最佳适应度')
title('GSABO的进化曲线')

代码中注释非常详细,有对神经网络构建的注释,有对GASBO-BP代码的注释,简单易懂。

代码附带UCI常用的数据集及其解释。大家可以自行尝试别的数据进行分类。

完整代码获取方式,点击下方卡片,后台回复关键词。关键词不区分大小写。

关键词:GSABOBP文章来源地址https://www.toymoban.com/news/detail-600128.html

到了这里,关于改进的减法优化器算法优化BP神经网络---回归+分类两种案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包