MATLAB 利用BP神经网络预测数据遇到问题 50
我想对一组数据进行预测,需要得出它的后10个值,程序如下:p=[9393.185.3;93.185.380.7;85.380.788.4;80.788.480.2;88....
我想对一组数据进行预测,需要得出它的后10个值,程序如下:p=[93 93.1 85.3;
93.1 85.3 80.7;
85.3 80.7 88.4;
80.7 88.4 80.2;
88.4 80.2 74;
80.2 74 73.7;
74 73.7 76.7;
73.7 76.7 77.5;
76.7 77.5 68;]
t=[80.7 88.4 80.2 74 73.7 76.7 77.5 68 66.76];
pmax=max(p);pmax1=max(pmax);
pmin=min(p);pmin1=min(pmin);
for i=1:9 %归一化处理
p1(i,:)=(p(i,:)-pmin1)/(pmax1-pmin1);
end
t1=(t-pmin1)/(pmax1-pmin1);
t1=t1';
net=newff([0 1;0 1;0 1],[7 1],{'tansig','logsig'},'traingd');
for i=1:9
net.trainParam.epochs=15000;
net.trainParam.goal=0.01;
LP.lr=0.1;
net=train(net,p1(i,:)',t1(i));
end
y=sim(net,[77.5 68 66.76
]');
y1=y*(pmax1-pmin1)+pmin1
我第一次预测,得出y1=90.7775,代入这个值令y=sim(net,[68 66.76 90.7775]'),再进行预测,往后的结果就一直是84.1922了,这是为什么呢?而且这个值也比现实的预期要高,所以,该怎么修改这个程序呢?希望能得到大家的解答,谢谢。 展开
93.1 85.3 80.7;
85.3 80.7 88.4;
80.7 88.4 80.2;
88.4 80.2 74;
80.2 74 73.7;
74 73.7 76.7;
73.7 76.7 77.5;
76.7 77.5 68;]
t=[80.7 88.4 80.2 74 73.7 76.7 77.5 68 66.76];
pmax=max(p);pmax1=max(pmax);
pmin=min(p);pmin1=min(pmin);
for i=1:9 %归一化处理
p1(i,:)=(p(i,:)-pmin1)/(pmax1-pmin1);
end
t1=(t-pmin1)/(pmax1-pmin1);
t1=t1';
net=newff([0 1;0 1;0 1],[7 1],{'tansig','logsig'},'traingd');
for i=1:9
net.trainParam.epochs=15000;
net.trainParam.goal=0.01;
LP.lr=0.1;
net=train(net,p1(i,:)',t1(i));
end
y=sim(net,[77.5 68 66.76
]');
y1=y*(pmax1-pmin1)+pmin1
我第一次预测,得出y1=90.7775,代入这个值令y=sim(net,[68 66.76 90.7775]'),再进行预测,往后的结果就一直是84.1922了,这是为什么呢?而且这个值也比现实的预期要高,所以,该怎么修改这个程序呢?希望能得到大家的解答,谢谢。 展开
展开全部
我将你的程序做了修改,现在可以运行了
p=[93 93.1 85.3;
93.1 85.3 80.7;
85.3 80.7 88.4;
80.7 88.4 80.2;
88.4 80.2 74;
80.2 74 73.7;
74 73.7 76.7;
73.7 76.7 77.5;
76.7 77.5 68;];
t=[80.7 88.4 80.2 74 73.7 76.7 77.5 68 66.76];
p=p';
[pn,inputps]=mapminmax(p);
[tn,outputps]=mapminmax(t);
net=newff(pn,tn,7,{'tansig','purelin'},'traingd');
net.trainParam.epochs=15000;
net.trainParam.goal=0.01;
net.trainParam.show=50;
net.trainParam.lr = 0.01;
net=train(net,pn,tn);
p1=[77.5 68 66.76];
p1=p1';
p1n=mapminmax('apply',p1,inputps);
y=sim(net,p1n);
y1=mapminmax('reverse',y,outputps)
p=[93 93.1 85.3;
93.1 85.3 80.7;
85.3 80.7 88.4;
80.7 88.4 80.2;
88.4 80.2 74;
80.2 74 73.7;
74 73.7 76.7;
73.7 76.7 77.5;
76.7 77.5 68;];
t=[80.7 88.4 80.2 74 73.7 76.7 77.5 68 66.76];
p=p';
[pn,inputps]=mapminmax(p);
[tn,outputps]=mapminmax(t);
net=newff(pn,tn,7,{'tansig','purelin'},'traingd');
net.trainParam.epochs=15000;
net.trainParam.goal=0.01;
net.trainParam.show=50;
net.trainParam.lr = 0.01;
net=train(net,pn,tn);
p1=[77.5 68 66.76];
p1=p1';
p1n=mapminmax('apply',p1,inputps);
y=sim(net,p1n);
y1=mapminmax('reverse',y,outputps)
追问
谢谢,从预测结果上来看,还是不太理想,结果并没有按预期那样逐渐减小。不过已经不会出现预测两次就重复结果的情况了。请问我的问题是出在哪里呢?
追答
神经网络预测效果好的话,需要大量的数据,可能是你的数据太少了吧!
归一化处理我用的是matlab自带的归一化函数,效果应该比自己编的归一化好一些!
另外你还可以提高预设精度,再看看效果!
展开全部
归一反归一的不对
更多追问追答
追问
请问该如何改进呢?谢谢。
追答
你联系方式发来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上说的对~你们QQ解决吧。。。。
追问
呵呵,我就不说楼上的加了我的QQ说了两句就说让我自己想,然后也懒得理我了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询