matlab bp神經網絡預測(不好用的版本)

 最近做了一個校數學建模的比賽,謝了一篇論文,裏面用了好幾個模型。網絡上找的bp神經網絡的學習預測模型親測真的不可以用啊 TAT 要不就預測的值和實際值差了幾千裏,可能是我數據少的緣故吧。無論如何,先發上來記錄一下吧。。。
 題目是知道了十年內的廣州市房價,往後預測3年後的房價。我直接丟10年內的數據。

版本一:
x=[5119.276,6688.352,6842.004,7196.007,8360.984,8255.013,12839.98,14399.89,14502.29,16537.52];

lag=1;
% 自迴歸階數
iinput=x;
% x爲原始序列(行向量)
n=length(iinput);
%準備輸入和輸出數據
inputs=zeros(lag,n-lag);
for i=1:n-lag
inputs(:,i)=iinput(i:i+lag-1)’;
end
targets=x(lag+1:end);
%創建網絡
hiddenLayerSize = 10;
%隱藏層神經元個數
net = fitnet(hiddenLayerSize);
% 避免過擬合,劃分訓練,測試和驗證數據的比例
net.divideParam.trainRatio = 50/100;
net.divideParam.valRatio = 25/100;
net.divideParam.testRatio = 25/100;
%訓練網絡
[net,tr] = train(net,inputs,targets);
net.trainParam.show=1000; %每1000輪迴顯示一次結果
net.trainParam.Lr=0.05; %學習速率爲0.05
net.trainParam.epochs=3000; %循環10000次
net.trainParam.goal=0.0000000001; %均方誤差
%% 根據圖表判斷擬合好壞
%yn=net(inputs);
% errors=targets-yn;
%figure, ploterrcorr(errors)
%繪製誤差的自相關情況(20lags)
% figure, parcorr(errors)
%繪製偏相關情況
% [h,pValue,stat,cValue]= lbqtest(errors)
%Ljung-Box Q檢驗(20lags) figure,plotresponse(con2seq(targets),con2seq(yn))
%看預測的趨勢與原趨勢% figure, ploterrhist(errors)
%誤差直方圖% figure, plotperform(tr)
%誤差下降線%% 下面預測往後預測幾個時間段
fn=3;
%預測步數爲fn。

f_in=iinput(n-lag+1:end)’;f_out=zeros(1,fn);
%預測輸出% 多步預測時,用下面的循環將網絡輸出重新輸入
for i=1:fn f_out(i)=net(f_in);
f_in=[f_in(2:end);f_out(i)];
end
% 畫出預測圖
figure,plot(2007:2016,iinput,’b’,2016:2019,[iinput(end),f_out],’r’)

版本二:

clc
clear all
p=[2007:2019];
t=[6795,7456,8677,11534,14605,15472,18163,18747,19711,21164,25380,28350,31660];
%t=[6795,7456,8677,11534,14605,15472,18163,18747,19711,21164];
%數據歸一化
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
dx=[-1,1];
%BP網絡訓練
net=newff(dx,[5,1],{‘tansig’,’tansig’,’purelin’},’traingdx’);
net.trainParam.show=1000; %每1000輪迴顯示一次結果
net.trainParam.Lr=0.05; %學習速率爲0.05
net.trainParam.epochs=3000; %循環10000次
net.trainParam.goal=0.00001; %均方誤差
net=train(net,pn,tn);
%對原數據進行仿真
an=sim(net,pn);
a=postmnmx(an,mint,maxt); %還原仿真得到的數據
%與實際數據對比
x=2007:2019;
newk=a(1,:);
figure;
plot(x,newk,’r-o’,x,t,’b–+’);
legend(‘預測值’,’實際值’);
xlabel(‘時間’);
ylabel(‘房價’);
%對新數據進行預測
pnew=[2017 2018 2019];%預測下三年的數據
pnewn=tramnmx(pnew,minp,maxp);%新數據歸一化
anewn=sim(net,pnewn);
anew=postmnmx(anewn,mint,maxt)%還原得到預測值

你們看着吧。。。。不懂的可以問我,我錯了的也可以和我說。不是原創,參考了網絡上的程序,改了改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章