Lillian 发表于 2009-4-12 15:20

预测样本怎样归一化和反归一化?

最近弄一个BP程序,训练误差还可以,但是预测时候误差很大,布置是训练样本不好,还是算法选的不对。另外,预测样本进行归一化和反归一化的时候,我有点不确定,该怎么弄呢?请高手帮忙!拜托!
程序及数据样本在附件里面。
clear
PP=load('pp.txt');
WW=load('ww.txt');
P=PP';
W=WW';
for i=1:4
P0(i,:)=(P(i,:)-min(P(i,:)))/(max(P(i,:))-min(P(i,:)));
end
for i=1
W0(i,:)=(W(i,:)-min(W(i,:)))/(max(W(i,:))-min(W(i,:)));
end
net=newff(minmax(P0),,{'tansig','tansig','purelin'},'traingda');
net.trainparam.show=50;%训练误差一次显示最大间隔步数
net.trainparam.lr=0.05;%学习率
net.trainparam.lr_inc=1.05;
net.trainparam.epochs=20000;%最大训练步数
net.trainparam.goal=0.0001;%网络误差
net=init(net);
=train(net,P0,W0);
W
A=sim(net,P0);%求原始数据的拟合数据
for i=1
Y(i,:)=(max(W(i,:))-min(W(i,:)))*A(i,:)+min(W(i,:));
end
Y
E=W-Y%求拟合误差
T1=1:1:15;
figure;
plot(T1,W,'b',T1,Y,'r',T1,E,'g');
XX=load('xx.txt');%存放输入、输出样本数据X、T
TT=load('tt.txt');
X=XX';
T=TT';
%这样归一化和反归一化对么?
for i=1:4
X0(i,:)=(X(i,:)-min(X(i,:)))/(max(X(i,:))-min(X(i,:)));
end
for i=1
T0(i,:)=(T(i,:)-min(T(i,:)))/(max(T(i,:))-min(T(i,:)));
end
T
AA=sim(net,X0);%求预测数据的拟合数据
for i=1
YY(i,:)=(max(T(i,:))-min(T(i,:)))*AA(i,:)+min(T(i,:));
end
YY
E=T-YY
for j=1:9
EE(1,j)=E(1,j)/T(1,j);
end
EE
T1=1:1:9;
figure;
plot(T1,T,'b',T1,YY,'r',T1,EE,'g');

[ 本帖最后由 Lillian 于 2009-4-12 15:29 编辑 ]

lzh19840809 发表于 2009-4-16 10:07

我有个问题想请教你,为什么要进行归一化?我觉得怎么没有必要呢?

matlab_xinshou 发表于 2009-5-8 15:59

回复 楼主 Lillian 的帖子

归一化程序:(自编)
maxu=max(u)
minu=min(u)
for i=1:m
for j=1:n
   uc(i,j)=(u(j,i)-minu(1,i))/(maxu(1,i)-minu(1,i));
end
end
另外,也可以用premnmx语句进行归一化:
premnmx语句的语法格式是:=premnmx(P,T)

matlab_xinshou 发表于 2009-5-8 16:00

原帖由 lzh19840809 于 2009-4-16 10:07 发表 http://www.chinavib.com/forum/images/common/back.gif
我有个问题想请教你,为什么要进行归一化?我觉得怎么没有必要呢?

归一化是为了加快训练网络的收敛性,具体作用是归纳统一样本的统计分布性。

matlab_xinshou 发表于 2009-5-8 16:06

回复 楼主 Lillian 的帖子

至于说反归一化,可以用postmnmx函数哦!

gzslbs2003 发表于 2009-11-20 23:17

向前辈学习!
页: [1]
查看完整版本: 预测样本怎样归一化和反归一化?