BP神经网络matlab实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;
%使用训练好的神经网络对新输入数据进行预测