BP神经网络matlab实例

  • 格式:pdf
  • 大小:267.03 KB
  • 文档页数:6

BP神经网络及其MATLAB实例
问题:BP神经网络预测2020年某地区客运量和货运量
公路运量主要包括公路客运量和公路货运量两方面。

某个地区的公路运量主要与该地区的人数、机动车数量和公路面积有关,已知该地区20年(1999-2018)的公路运量相关数据如下:
人数/万人:
20.5522.4425.3727.1329.4530.1030.9634.0636.4238.09 39.1339.9941.9344.5947.3052.8955.7356.7659.1760.63机动车数量/万辆:
0.60.750.850.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1
公路面积/单位:万平方公里:
0.090.110.110.140.200.230.230.320.320.34 0.360.360.380.490.560.590.590.670.690.79
公路客运量/万人:5126621777309145104601138712353157501830419836 21024194902043322598251073344236836405484292743462公路货运量/万吨:
1237137913851399166317141834432281328936 11099112031052411115133201676218673207242080321804影响公路客运量和公路货运量主要的三个因素是:该地区的人数、机动车数量和公路面积。

Matlab代码实现
%人数(单位:万人)
numberOfPeople=[20.5522.4425.3727.1329.4530.1030.9634.0636.42 38.0939.1339.9941.9344.5947.3052.8955.7356.7659.1760.63];
%机动车数(单位:万辆)
numberOfAutomobile=[0.60.750.850.91.051.351.451.61.71.852.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1];
%公路面积(单位:万平方公里)
roadArea=[0.090.110.110.140.200.230.230.320.320.340.360.360.38
0.490.560.590.590.670.690.79];
%公路客运量(单位:万人)
passengerVolume=[5126621777309145104601138712353157501830419836 21024194902043322598251073344236836405484292743462];
%公路货运量(单位:万吨)
freightVolume=[123713791385139916631714183443228132893611099 112031052411115133201676218673207242080321804];
%输入数据矩阵
p=[numberOfPeople;numberOfAutomobile;roadArea];
%目标(输出)数据矩阵
t=[passengerVolume;freightVolume];
%对训练集中的输入数据矩阵和目标数据矩阵进行归一化处理
[pn,inputStr]=mapminmax(p);
[tn,outputStr]=mapminmax(t);
%建立BP神经网络
net=newff(pn,tn,[372],{'purelin','logsig','purelin'});
%每10轮回显示一次结果
net.trainParam.show=10;
%最大训练次数
net.trainParam.epochs=5000;
%网络的学习速率
net.trainParam.lr=0.05;
%训练网络所要达到的目标误差
net.trainParam.goal=0.65*10^(-3);
%网络误差如果连续6次迭代都没变化,则matlab会默认终止训练。

为了让程序继续运行,用以下命令取消这条设置
net.divideFcn='';
%开始训练网络
net=train(net,pn,tn);
%使用训练好的网络,基于训练集的数据对BP网络进行仿真得到网络输出结果%(因为输入样本(训练集)容量较少,否则一般必须用新鲜数据进行仿真测试) answer=sim(net,pn);
%反归一化
answer1=mapminmax('reverse',answer,outputStr);
%绘制测试样本神经网络输出和实际样本输出的对比图(figure(1))
t=1999:2018;
%测试样本网络输出客运量
a1=answer1(1,:);
%测试样本网络输出货运量
a2=answer1(2,:);
figure(1);
subplot(2,1,1);plot(t,a1,'ro',t,passengerVolume,'b+');
legend('网络输出客运量','实际客运量');
xlabel('年份');ylabel('客运量/万人');
title('神经网络客运量学习与测试对比图');
grid on;
subplot(2,1,2);plot(t,a2,'ro',t,freightVolume,'b+');
legend('网络输出货运量','实际货运量');
xlabel('年份');ylabel('货运量/万吨');
title('神经网络货运量学习与测试对比图');
grid on;
%使用训练好的神经网络对新输入数据进行预测
%新输入数据(2019年和2020年的相关数据)
newInput=[73.3975.55; 3.9635 4.0975;0.9880 1.0268];
%利用原始输入数据(训练集的输入数据)的归一化参数对新输入数据进行归一化newInput=mapminmax('apply',newInput,inputStr);
%进行仿真
newOutput=sim(net,newInput);
%反归一化
newOutput=mapminmax('reverse',newOutput,outputStr);
disp('预测2019和2020年的公路客运量分别为(单位:万人):'); newOutput(1,:)
disp('预测2019和2020年的公路货运量分别为(单位:万吨):'); newOutput(2,:)
%在figure(1)的基础上绘制2019和2020年的预测情况
figure(2);
t1=1999:2020;
subplot(2,1,1);plot(t1,[a1newOutput(1,:)],'ro',t,passengerVolume, 'b+');
legend('网络输出客运量','实际客运量');
xlabel('年份');ylabel('客运量/万人');
title('神经网络客运量学习与测试对比图(添加了预测数据)');
grid on;
subplot(2,1,2);plot(t1,[a2newOutput(2,:)],'ro',t,freightVolume, 'b+');
legend('网络输出货运量','实际货运量');
xlabel('年份');ylabel('货运量/万吨');
title('神经网络货运量学习与测试对比图(添加了预测数据)');
grid on;
运行结果
Matlab绘制的图像
BP神经网络货运量学习与测试对比图
BP神经网络货运量学习与测试对比图(包含预测值)。