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)%还原得到预测值

你们看着吧。。。。不懂的可以问我,我错了的也可以和我说。不是原创,参考了网络上的程序,改了改。

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值