各位高手前辈们:
你们好!
我刚刚接触神经网络不久,在用RBF网络来进行温度预测时,得到的预测误差比较大。现在调节的方法只是调整SPREAD值,结果很不理想!我想知道是什么原因产生这么大的误差,温度相差40度,是不是程序有什么问题,希望各位前辈能帮我指出哪部分有错误,提出一些解决的方法,我在此表示真诚的感谢!程序如下!
谢谢大家了!
%产生数据
clc;
clear;
%generate the learing data
x=[0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400 420 440;
3 5 7 8 10 11 12 13 13 13 15 16 18 19 19 19 19 20 20 21 21 21 22;
41 41 43 44 49 64 70 81 89 95 100 104 108 111 112 111 122 127 126 125 126 125 129];
F=[40.6 42.2 41.2 42.8 44.8 55.8 63.2 58.6 65.4 70.5 76.2 83.8 82.8 85.2 78.8 92 97 102.2 106.9 98.9 104.8 106.2 108];
x_train=x(:,1:20);F_train=F(:,1:20);
x_test=x(:,21:23);F_test=F(:,21:23);
%训练数据归一化处理
for i=1:3
x1_train(i,:)=(x_train(i,:)-min(x(i,:)))/(max(x(i,:))-min(x(i,:)))
end
F1=F_train/max(F);
%测试数据归一化处理
for i=1:3
x1_test(i,:)=(x_test(i,:)-min(x(i,:)))/(max(x(i,:))-min(x(i,:)))
end
%% 建立RBF网络
err_goal=0.0001;
spread=0.7;
df=1;
mn=100;
net=newrb(x1_train,F1,err_goal,spread,mn,df);
Y1=sim(net,x1_train);
Y2=sim(net,x1_test);
%训练数据反归一化处理
for i=1:3
x2_train(i,:)=x1_train(i,:)*(max(x(i,:))-min(x(i,:)))+min(x(i,:))
end
Y3=Y1*max(F);
%测试数据反归一化处理
for i=1:3
x_test(i,:)=x_test(i,:)*(max(x_test(i,:))-min(x_test(i,:)))+min(x_test(i,:))
end
Y4=Y2*max(F);
E=F_train-Y1;
SSE=sse(E);
MSE=mse(E);
%拟合图
figure(1);
plot(F_train);
hold on;
plot(Y3,'r:');
title('RBF网络拟合曲线图');
legend('实际值','预测值');
ylabel('表面温度');
xlabel('输入样本点');
figure(2);
plot(F_test,'-*');
hold on;
plot(Y4,'r:');
legend('期望输出','预测输出')
title('RBF网络预测曲线图')
ylabel('表面温度')
xlabel('样本')