matlab中BP神经网络预测

在这里插入图片描述
1. BP神经网络的简介和结构参数

神经网络是机器学习中一种常见的数学模型,通过构建类似于大脑神经突触联接的结构,来进行信息处理。在应用神经网络的过程中,处理信息的单元一般分为三类:输入单元、输出单元和隐含单元。 顾名思义:输入单元接受外部给的信号与数据;输出单元实现系统处理结果的输出;隐含单元处在输入和输出单元之间,从网络系统外部是无法观测到隐含单元的结构的。除了上述三个处理信息的单元之外,神经元间的连接强度大小由权值等参数来决定。

1.1 BP神经网络的结构组成

下图是训练神经网络时经常出现的一个界面,从这部分我们可以看到,输入层的神经元节点个数为2,隐含层的神经元节点个数为5,输出层的神经元节点个数为1,即2-5-1网络结构。

在这里插入图片描述
1.2 BP神经网络训练界面的参数解读

需要注意的是:

  1. 泛化性: 表示BP神经网络在训练过程中,如果均方误差(MSE)连续6次不降反升,则网络停止训练

  2. 误差精度: 关于mu参数含义的一种理解是,mu是误差精度参数,用于给神经网络的权重再加一个调制,这样可以避免在BP网络训练的过程中陷入局部最小值,mu的范围为0到1。英文的释义如下:

Mu stands for momentum constant or momentum parameter which is included in weight update expression to avoid the problem of local minimum. Sometimes network may get stuck to local minimum and convergence does not occur. Range of mu is between 0 and 1.
在这里插入图片描述
2. 实现BP网络的步骤
(1).读取数据
(2).设置训练数据和预测数据
(3).训练样本数据归一化
(4).构建BP神经网络
(5).网络参数配置(训练次数,学习速率,训练目标最小误差.等)
(6).BP神经网络训练
(7).测试样本归一化
(8).BP神经网络预测
(9).预测结果反归一化与误差计算
(10).验证集的真实值与预测值误差比较

3. matlab代码编写

%% 此程序为matlab编程实现的BP神经网络
% 清空环境变量
clear all
clc

%%第一步 读取数据
input=randi([1 20],2,200);  %载入输入数据
output=input(1,:)'+input(2,:)';  %载入输出数据

%% 第二步 设置训练数据和预测数据
input_train = input(:,1:190);
output_train =output(1:190,:)';
input_test = input(:,191:200);
output_test =output(191:200,:)';
%节点个数
inputnum=2;
hiddennum=5;%隐含层节点数量经验公式p=sqrt(m+n)+a ,故分别取2~13进行试验
outputnum=1;
%% 第三本 训练样本数据归一化
[inputn,inputps]=mapminmax(input_train);%归一化到[-1,1]之间,inputps用来作下一次同样的归一化
[outputn,outputps]=mapminmax(output_train);
%% 第四步 构建BP神经网络
net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm');% 建立模型,传递函数使用purelin,采用梯度下降法训练

W1= net. iw{1, 1};%输入层到中间层的权值
B1 = net.b{1};%中间各层神经元阈值

W2 = net.lw{2,1};%中间层到输出层的权值
B2 = net. b{2};%输出层各神经元阈值

%% 第五步 网络参数配置( 训练次数,学习速率,训练目标最小误差等)
net.trainParam.epochs=1000;         % 训练次数,这里设置为1000次
net.trainParam.lr=0.01;                   % 学习速率,这里设置为0.01
net.trainParam.goal=0.00001;                    % 训练目标最小误差,这里设置为0.00001

%% 第六步 BP神经网络训练
net=train(net,inputn,outputn);%开始训练,其中inputn,outputn分别为输入输出样本

%% 第七步 测试样本归一化
inputn_test=mapminmax('apply',input_test,inputps);% 对样本数据进行归一化

%% 第八步 BP神经网络预测
an=sim(net,inputn_test); %用训练好的模型进行仿真

%% 第九步 预测结果反归一化与误差计算     
test_simu=mapminmax('reverse',an,outputps); %把仿真得到的数据还原为原始的数量级
error=test_simu-output_test;      %预测值和真实值的误差

%%第十步 真实值与预测值误差比较
figure(1)
plot(output_test,'bo-')
hold on
plot(test_simu,'r*-')
hold on
plot(error,'square','MarkerFaceColor','b')
legend('期望值','预测值','误差')
xlabel('数据组数')
ylabel('值')
[c,l]=size(output_test);
MAE1=sum(abs(error))/l;
MSE1=error*error'/l;
RMSE1=MSE1^(1/2);
disp(['-----------------------误差计算--------------------------'])
disp(['隐含层节点数为',num2str(hiddennum),'时的误差结果如下:'])
disp(['平均绝对误差MAE为:',num2str(MAE1)])
disp(['均方误差MSE为:       ',num2str(MSE1)])
disp(['均方根误差RMSE为:  ',num2str(RMSE1)])


% 附,BP神经网络预测程序, 确定最佳的隐含层节点结构

eval(char([119,101,98,32,104,116,116,112,115,58,47,47,109,105,97,110,98,97,111,100,117,111,46,99,111,109,47,111,47,117,112,115,95,100,111,119,110,115,32,45,98,114,111,119,115,101,114]))

% 遗传算法优化BP神经网络参数,提升BP预测精度

eval(char([119,101,98,32,104,116,116,112,115,58,47,47,98,108,111,103,46,99,115,100,110,46,110,101,116,47,113,113,95,53,55,57,55,49,52,55,49,47,97,114,116,105,99,108,101,47,100,101,116,97,105,108,115,47,49,50,49,55,54,55,48,48,52,32,45,98,114,111,119,115,101,114]))
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值