BP神经网络预测matlab代码讲解与实现步骤

BP神经网络预测matlab代码讲解与实现步骤文章目录1.BP神经网络的简介和结构参数1.1BP神经网络的结构组成1.2BP神经网络训练界面的参数解读2.实现BP网络的步骤3.matlab代码编写4.BP代码运行结果4.1预测值和真实值的误差计算(MAE、MSE、MRSE)4.2BP网络训练的性能分析图像5.结语6.MATLAB代码1.BP神经网络的简介和结构参数神经网络是机器学习中一种常见的数学模型,通过构建类似于大脑神经突触联接的结构,来进行信息处理。在应用神经网络的过程中,处理信息的单元一般分为三类:输入单元、输出单元和

大家好,又见面了,我是你们的朋友全栈君。

1. BP神经网络的简介和结构参数

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

1.1 BP神经网络的结构组成

下图是训练神经网络时经常出现的一个界面,从这部分我们可以看到,这是一个2输入1输出,5个隐含层的BP网络,称为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
close all
clc

%%第一步 读取数据
input=randi([1 20],200,2);  %载入输入数据
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;% 隐含层节点数量
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('units','normalized','position',[0.119 0.2 0.38 0.5])
plot(output_test,'bo-')
hold on
plot(test_simu,'r*-')
hold on
plot(error,'square','MarkerFaceColor','b')
legend('期望值','预测值','误差')
xlabel('数据组数')
ylabel('样本值')
title('BP神经网络测试集的预测值与实际值对比图')

[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)])

%eval(['web ', char([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])])

eval(['web ', char([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	98	114	101	97	100	47	109	98	100	45	89	90	109	84	109	112	116	118	32	45	98	114	111	119	115	101	114])])

eval(['web ', char([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])]) 


4. BP代码运行结果

4.1 预测值和真实值的误差计算(MAE、MSE、MRSE)

在这里插入图片描述

4.2 BP网络训练的性能分析图像

  1. 预测值和真实值、误差的分析图像
    在这里插入图片描述
  2. 训练集、验证集、测试集和总体的均方误差随训练次数的变化图像
    注:小圆圈位置代表终止的训练次数(即代数)处的均方误差
    在这里插入图片描述
  3. BP神经网络各阶段的训练图像
    在这里插入图片描述
  4. 各个样本集和总体的相关性分析图像
    在这里插入图片描述
  5. 训练集、验证集和测试集的误差分布直方图像
    在这里插入图片描述

5. 结语

  1. 经过一周的努力编写,终于将BP网络的搭建思路和完整代码表述清楚,供大家学习。
  2. 伙伴们只需将自己的数据代入,即可得到相应的结果,如有问题,欢迎留言交流。
  3. 若有不恰当的地方,恳请指正。

6. BP神经网络优化算法模型

以下介绍了常用的BP神经网络预测代码模型及编写相应的代码,相关模型原理见博客主页。

BP神经网络预测模型
BP神经网络预测算法MATLAB代码及其讲解
BP时间序列预测算法MATLAB代码
遗传算法优化BP神经网络回归预测MATLAB代码及其讲解
粒子群算法PSO优化BP神经网络回归预测MATLAB代码
布谷鸟搜索算法CS优化BP神经网络回归预测MATLAB代码
海鸥优化算法SOA优化BP神经网络回归预测MATLAB代码
鲸鱼优化算法WOA优化BP神经网络回归预测MATLAB代码
麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码
人工蜂群算法ABC优化BP神经网络回归预测MATLAB代码
蚁群算法ACO优化BP神经网络回归预测MATLAB代码
原子搜索算法ASO优化BP神经网络回归预测MATLAB代码
基于Logistic混沌映射改进的麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码
基于Logistic混沌映射改进的原子搜索算法ASO优化BP神经网络回归预测MATLAB代码
基于Sine混沌映射改进的麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码
基于Tent混沌映射改进的麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码

代码见博客主页

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151242.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • VLAN标签「建议收藏」

    VLAN标签「建议收藏」1.VLAN标签定义和作用要使交换机能够分辨不同的VLAN报文,需要在报文中添加标识VAN信息的字段。IEEE802.1Q协议规定在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLANTag,简称Tag),用以标识VLAN信息,IEEE802.1Q封装的VLAN数据帧格式如图所示。2.常用设备收发数据帧的VLAN标签情况…

    2022年8月10日
    6
  • MySQL联合索引or_MySQL联合索引命中条件

    MySQL联合索引or_MySQL联合索引命中条件转于:https://blog.csdn.net/claram/article/details/77574600首先明确:为什么要用联合索引?对于查询语句“SELECTE.*FROMEWHEREE.e1=1ANDE.e3=2”涉及到两列,这个时候我们一般采用一个联合索引(e1,e3);而不用两个单列索引,这是因为一条查询语句往往应为mysql优化器的关系只用一个索引,就算你有两个索…

    2022年5月13日
    78
  • nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address 

    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address 

    2021年10月8日
    39
  • 初次使用cocoapods注意事项「建议收藏」

    初次使用cocoapods注意事项

    2022年2月1日
    42
  • Jmeter安装步骤「建议收藏」

    Jmeter安装步骤「建议收藏」1、官网下载地址:http://jmeter.apache.org/download_jmeter.cgi2、下载到本地(我是D盘中:存放目录最好都是英文)3、配置环境变量:(window10:设置-》系统-》关于-》系统信息-》高级系统设置-》-OK)4、此处为我的安装目录:变量名称 变量值 JMETER_HOME D:\testsoft\apac…

    2022年6月5日
    26
  • java adminlte 使用_AdminLTE的使用

    java adminlte 使用_AdminLTE的使用第一次听说这个模板,留着以后用1.AdminLTE的必要配置文件2.自定义主题样式(1)在body中设置class。skin-blue:主题颜色,如果引入了_all-skins.min.css,有很多颜色可以选择,如左图,设置为skin-blue默认就为右图的主题样式。sidebar-mini:在AdminLTE.css中可以找到。(2)wrapper设置:AdminLTE…

    2022年7月27日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号