楼主: cwj1116
1191 3

求救高手 [推广有奖]

  • 0关注
  • 0粉丝

本科生

35%

还不是VIP/贵宾

-

威望
0
论坛币
1957 个
通用积分
0.0600
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
971 点
帖子
68
精华
0
在线时间
85 小时
注册时间
2009-9-24
最后登录
2013-8-17

2论坛币
MATLAB中利用BP工具箱进行预测,对原始样本集进行测试误差很小,而对从原始样本中抽取的小样本测试误差很大,程序如下:
data=xlsread('55-90',-1)';%'55-90'为excle文件名,7列365行;
f=xlsread('55-90',-1)';%还是导入excle文件,1列365行;
d1=[data(1,:)];
d2=[data(2,:)];
d3=[data(3,:)];
d4=[data(4,:)];
d5=[data(5,:)];
d6=[data(6,:)];
d7=[data(7,:)];
d=[d1;d2;d3;d4;d5;d6;d7];
p=[(d1-mean(d1))./std(d1);(d2-mean(d2))./std(d2);(d3-mean(d3))./std(d3);(d4-mean(d4))./std(d4);(d5-mean(d5))./std(d5);(d6-mean(d6))./std(d6);(d7-mean(d7))./std(d7)];
t=(f- mean(f))./std(f);
P_train=[p(:,1:300)];
T_train=[t(:,1:300)];
P_test=[p(:,301:365)];
T_test=[t(:,301:365)];
s=7:15
res=zeros(size(s));
for i=1:length(s)           
    net=newff(minmax(p),[s(i),1],{'tansig','logsig'},'trainlm');
    net.iw{1,1}=zeros(size(net.iw{1,1}))+0.5;
    net.lw{2,1}=zeros(size(net.lw{2,1}))+0.75;
    net.b{1,1}=zeros(size(net.b{1,1}))+0.5;
    net.b{2,1}=zeros(size(net.b{2,1}));
    net.trainParam.epochs=5000;
    net.trainParam.goal =1e-7;
    net=train(net,P_train,T_train);
    y=sim(net,P_test);
    error=(y.*std(f(:,301:365))+mean(f(:,301:365))-f(:,301:365))./f(:,301:365);
    res(i)=norm(error);
   
end

number=find(res==min(res));%number为使得误差最小的隐层神经元个数
if(length(number)>1) no=number(1)+6;
else no=number+6;
end
clear error,res
%选定隐层神经元数目后,建立网络,训练仿真。
net=newff(minmax(p),[no,1],{'tansig','logsig'},'trainlm');
    net.iw{1,1}=zeros(size(net.iw{1,1}))+0.5;
    net.lw{2,1}=zeros(size(net.lw{2,1}))+0.75;
    net.b{1,1}=zeros(size(net.b{1,1}))+0.5;
    net.b{2,1}=zeros(size(net.b{2,1}));
    net.trainParam.epochs=5000;
    net.trainParam.goal =1e-7;
net=train(net,p,t);
y=sim(net,p);
error=(y.*std(f)+mean(f)-f)./f;%error为网络的误差向量
r=norm(error);%r为网络的整体误差
save net                      %保存最好的网络
%输入测试数据
data2=xlsread('55-90',-1)';
dd1=[data2(1,:)];
dd2=[data2(2,:)];
dd3=[data2(3,:)];
dd4=[data2(4,:)];
dd5=[data2(5,:)];
dd6=[data2(6,:)];
dd7=[data2(7,:)];
p=[dd1;dd2;dd3;dd4;dd5;dd6;dd7];
f2=[data2(8,:)];
p_test2=[(dd1-mean(dd1))./std(dd1);(dd2-mean(dd2))./std(dd2);(dd3-mean(dd3))./std(dd3);(dd4-mean(dd4))./std(dd4);(dd5-mean(dd5))./std(dd5);(dd6-mean(dd6))./std(dd6);(dd7-mean(dd7))./std(dd7)];

y2=sim(net,p_test2);
error=(y2.*std(f2)+mean(f2)-f2)./f2;%error为网络的误差向量
r=norm(error);%r为网络的整体误差
fy=y2.*std(f2)+mean(f2);
%下面是图像显示与结果输出
plot(data2,f2,'rx-',data2,fy,'go:')%绘制投资总量与实际产值,投资总量与仿真的产值图像,
                            %红色表示实际图像,绿色表示仿真图像
xlabel('流量')
ylabel('实际星子水位与仿真星子水位')
title('流量水位图(实际与仿真值比较)')

关键词:xlsread Number length MATLAB xlabel 高手 求救
my heart will go on!
沙发
fuwf120 发表于 2009-12-16 16:37:00 |只看作者 |坛友微信交流群
不是MATLAB程序的问题,是BP的问题,样本内过度训练造成过度拟合,因此样本内误差小,而样本外误差大
已有 1 人评分论坛币 收起 理由
Xaero + 20 我很赞同

总评分: 论坛币 + 20   查看全部评分

使用道具

藤椅
cwj1116 发表于 2010-3-4 16:38:52 |只看作者 |坛友微信交流群
请问高手这种情况如何处理啊?跪谢!
my heart will go on!

使用道具

板凳
fuwf120 发表于 2010-3-5 09:36:33 |只看作者 |坛友微信交流群
用SVM或者LS-SVM可减少样本训练过度的情况

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 00:15