数学建模学习笔记(二十九)BP神经网络使用详例

2022-06-14 10:38:00 浏览数 (1)

在本专栏的第十二篇记录过神经网络的原理和常用函数 此次记录实战中的一次使用,目的是预测垃圾量的增长,垃圾量和其它几个因素相关 此实例包含训练和预测

代码语言:javascript复制
%GDP
%常驻人口数
x1=[93.48 96.13 100.98 106.27 108.94 109.99 110.85 111.91 113.59 129.12 135.63 142.46 149.36 154.58];
%地区生产总值
x2=[1123.61 1284.61 1498.24 1623.17 1832.63 2441.75 2829.62 3206.57 2958.85 3714.57 4216.52 4601.5 5018.36 6103.69];
%社会消费品零售总额
x3=[210.33 240.23 279.07 322.68 384 457.27 542.28 593.79 649.04 670.9 737.11 803.87 810.4 866.73];
%游客
x4=[1157.2 1250.29 1185.37 1112.65 1276.8 1301.38 1324.36 1324.53 1393.46 1371.5 1359.4 1384 1359.33 1462.68];
%垃圾量
x0=[47.8 56 58.4 52.9 52.9 51.1 51.1 47.55 53.51 57.26 63.96 68.48 71.05 76.2];
A=[x1;x2;x3;x4];
B=x0;
[pn,minp,maxp,tn,mint,maxt]=premnmx(A,B);%对于输入矩阵 A和 B进行归一化处理
dx=[-1,1;-1,1;-1,1;-1,1;];%归一化处理后最小值为-1,最大值为 1
%BP网络训练
net=newff(dx,[4 7 1],{'tansig','tansig','purelin','tansig'},'traingdx');%建立模型,并用梯度下降法训练
net.trainParam.show=1000;00轮回显示一次结果
net.trainParam.Lr=0.05;%学习速率为 0.05
net.trainParam.epochs=50000;%最大训练轮回为 5000次
net.trainParam.goal=0.65*10^(-3);%均方误差
net=train(net,pn,tn);%开始训练,其中 pn、 tn分别为输入输出样本
%利用原始数据对 BP网络仿真
an=sim(net,pn);%把训练好的模型进行仿真
a=postmnmx(an,mint,maxt);%把仿真得到的数据还原为原始的数量级
x=2006:2019;
newk=a(1,:);
plot(x,newk,'r-o',x,x0,'b-- ');%绘制垃圾产生量对比图
legend('网络输出垃圾量 ','实际垃圾量 ');
xlabel('年份 ');
ylabel('垃圾量 /万吨 ');
%利用训练好的网络进行预测
 20-2039年的相关数据
pnew=[158.5 164.51 170.52 176.53 182.54 188.55 194.56 200.57 206.58 212.59 218.6 224.61 230.62 236.63 242.64 248.65 254.66 260.67 266.68 272.69;5858.09 6264.52 6670.95 7077.38 7483.81 7890.24 8296.67 8703.1 9109.53 9515.96 9922.39 10328.82 10735.25 11141.68 11548.11 11954.54 12360.97 12767.4 13173.83 13580.26;932.56 982.91 1033.26 1083.61 1133.96 1184.31 1234.66 1285.01 1335.36 1385.71 1436.06 1486.41 1536.76 1587.11 1637.46 1687.81 1738.16 1788.51 1838.86 1889.21;1446.82 1463.51 1480.2 1496.89 1513.58 1530.27 1546.96 1563.65 1580.34 1597.03 1613.72 1630.41 1647.1 1663.79 1680.48 1697.17 1713.86 1730.55 1747.24 1763.93];
pnewn=tramnmx(pnew,minp,maxp);%利用原始数据的归一化参数对新数据进行归一化
anewn=sim(net,pnewn);%利用归一化后的数据进行仿真
anew=postmnmx(anewn,mint,maxt);%把仿真得到的数据还原为原始的数量级

0 人点赞