作业帮 > 综合 > 作业

求MATLAB的BP神经网络预测程序

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/04/30 13:32:08
求MATLAB的BP神经网络预测程序
年 份 2001 至2012共12年的销量数据是1183,1303,1278,1284,1187,1154,1267,1241,1302,1195,1256,1348.
求高手给出BP神经网络的MatlAB预测程序,能直接运行出结果的
能预测2013年的销量数据就可以了
求MATLAB的BP神经网络预测程序
%由于数据比较大,我又懒得用归一化,所以直接把数据降了3个数量级,
%不过我觉得应该没问题,但用归一化结果应该更准确些.
%由于初始权值和阀值均是随机给的,所以每次仿真都有点点不同,这是正常的.
p=[1183 1303 1278;1303 1278 1284;1278 1284 1187 ;...
1284 1187 1154;1187 1154 1267;1154 1267 1241;...
1267 1241 1302;1241 1302 1195;1302 1195 1256]'*0.001;
t=[ 1284 1187 1154 1267 1241 1302 1195 1256 1348]*0.001;
net=newff(minmax(p),[3,1],{'tansig','purelin'},'traingda');
net.trainParam.goal=0.001;
net.trainParam.show=20;
net.trainParam.epochs=1000;
net.trainParam.min_grad=1e-10;
net.trainParam.mc=0.95;
[net,tr]=train(net,p,t);
t1=sim(net,[1302 1195 1256]'*0.001);
t2013=t1*1000%2013 的 预测 数据
运行结果:
t2013 =
1301.9 再答: 关于问题一:很明显这可以通过程序来来取数的,我见过,只是我不很熟,所以就直接写的了;
你后面要预测几个数,对于一个输入向量,你就在T里面写几个对应的输出啊,我上面就是要预测一个输出,所以一个输入向量就是对应的一个输出值,但一次要预测的多了,结果肯定不很准确的;
问题二:我说的不一样是在收敛速度方面的,至于结果只有很细微的差别,影响不大,
“搞个最小数,到最大数之间的随机数,效果岂不是一样的?” 这句话不是很懂你的意思
再问: 你好,问题一,100个数据是不是不按a1,a2,a3;a2,a3,a4;a3,a4,a5?直接取a1,a2,a3,a4...a100。 问题二:我测试程序多次,预测结果在最小数1154和最大数1348之间都有。差异大。 不同随机参数影响神经网络曲线。参数为0时,神经网络曲线(b1,b2,......b13)(b1对应a1)与12个原有数据匹配。参数为1,差异就比较大了。这2条曲线怎么写出来?
再答: 我刚才在试了下。我之前那程序误差确实比较大,所以我换了种训练函数,经过多次仿真,发现结果比较稳定了:p=[1183 1303 1278;1303 1278 1284;1278 1284 1187 ;...    1284 1187 1154;1187 1154 1267;1154 1267 1241;...    1267 1241 1302;1241 1302 1195;1302 1195 1256]'*0.001;t=[ 1284 1187 1154 1267 1241 1302 1195 1256 1348]*0.001;net=newff(minmax(p),[3,1],{'tansig','purelin'},'trainlm');net.trainParam.goal=0.00001;net.trainParam.show=200;net.trainParam.min_grad=1e-20;net.trainParam.epochs=1000;[net,tr]=train(net,p,t);t1=sim(net,[1302 1195 1256]'*0.001);t2013=t1*1000%2013 的 预测 数据对于结果上的误差,你可以多次训练仿真,看误差曲线的走势,如果曲线最终收敛到期望的误差值,则这次结果比较准确,下图是我其中一次仿真的误差曲线,可以看到这次误差比较小,而且收敛速度较快;运行结果为:1348.3
再问: 你好,我再想问一下,怎么用plot得到原来是12个数据 与 神经网络中对应的12个数据的曲线图。这个图更能直观的看出拟合程度。plot程序是啥?加分
再答: 首先,我想说的是我这输出T只有9 个值,所以我只弄了9 个值得实际值与预测值的对比;如下:t2=sim(net,p)    ;                                   % 预测值           plot(2004:2012,t2,'+',2004:2012,t)      注:‘+’  表示实际值,实现代表预测值,纵坐标均缩小了1000 倍的,你自己可以改。