BP神经网络预测例子(matlab代码,工具箱)

BP神经⽹络预测例⼦(matlab代码,⼯具箱)
⽬录
参考学习b站:
烷值的预测
【改编】⾟烷值是汽油最重要的品质指标,传统的实验室检测⽅法存在样品⽤量⼤,测试周期长和费⽤⾼等问题,不适⽤于⽣产控制,特别是在线测试。近年发展起来的近红外光谱分析⽅法(NIR),作为⼀种快速分析⽅法,已⼴泛应⽤于农业、制药、⽣物化⼯、⽯油产品等领域。其优越性是⽆损检测、低成本、⽆污染,能在线分析,更适合于⽣产和控制的需要。实验采集得到50组汽油样品(⾟烷值已通过其他⽅法测量),并利⽤傅⾥叶近红外变换光谱仪对其进⾏扫描,扫描范围900~1700nm,扫描间隔为2nm,即每个样品的光谱曲线共含401个波长点,每个波长点对应⼀个吸光度。
(1)请利⽤这50组样品的数据,建⽴这401个吸光度和⾟烷值之间的模型。
(2)现给你10组新的样本,这10组样本均已经过近红外变换光谱仪扫描,请预测这10组新样本的⾟烷值。
⾸先导⼊数据,new_X为需要预测的新数据(样本)
matlab代码实现
%%此程序为matlab编程实现的BP神经⽹络
%清空环境变量
% clear
close all %关闭所有图形窗⼝
clc
%%第⼀步读取数据
input=X;%载⼊输⼊数据
output=Y;%载⼊输出数据
%%第⼆步设置训练数据和预测数据
%注意要将指标变为列向量
input_train =input(1:40,:)';
output_train =output(1:40,:)';
input_test =input(41:50,:)';
output_test =output(41:50,:)';
%节点个数
inputnum=401;%输⼊层节点数量
hiddennum=10;%隐含层节点数量
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};%输出层各神经元阈值
%%第五步⽹络参数配置(训练次数,学习速率,训练⽬标最⼩误差等)
神经网络预测
%%第六步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.1190.20.380.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)])
训练结果:
-----------------------误差计算--------------------------
隐含层节点数为10时的误差结果如下:
平均绝对误差MAE为:0.30444
均⽅误差MSE为:0.14714
均⽅根误差RMSE为:0.38359
进⾏预测:
predict_y =zeros(10,1);%初始化predict_y
pre_test=mapminmax('apply',new_X(:,:)',inputps);%对预测数据进⾏归⼀化for i =1:10
result =sim(net,pre_test(:,i));
predict_y(i)= result;
end
disp('预测值为:')
predict_y=mapminmax('reverse',predict_y,outputps);%把预测结果还原disp(predict_y)
结果:
预测值为:
87.9633
87.8581
88.8067
85.4666
85.3155
83.1005
86.3266
86.7106
89.1940
87.0632
⼯具箱实现
⽤神经⽹络⼯具箱(Neural Fitting app):
⽤神经⽹络⼯具箱(Neural Fitting app):
训练结果:
进⾏预测:
%写⼀个循环,预测接下来的⼗个样本的⾟烷值
%注意要将指标变为列向量,然后再⽤sim函数预测predict_y =zeros(10,1);%初始化predict_y
for i =1:10
result =sim(net,new_X(i,:)');
predict_y(i)= result;
end
disp('预测值为:')
disp(predict_y)

本文发布于:2024-09-21 21:43:45,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/361507.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:预测   数据   训练   烷值   扫描   误差   样本   节点
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议