天天看點

數學模組化學習筆記(二十九)BP神經網絡使用詳例

%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;%1000輪回顯示一次結果
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('垃圾量 /萬噸 ');
%利用訓練好的網絡進行預測
%2020-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);%把仿真得到的資料還原為原始的數量級