求大神帮我分析一下为什么测试样本的误差太大
clear all;
p=[5 2 5 1 5 5 5 3 3 4 4 3;
4 1 5 1 5 5 3 3 3 4 4 3;
5 2 1 1 5 5 4 3 3 4 4 3;
4 1 3 4 5 4 5 4 4 4 5 4;
5 2 5 4 5 5 4 4 4 4 5 4;
6 2 5 4 5 5 3 4 4 4 5 4;
4 1 1 5 5 5 1 3 4 4 2 4;
5 2 1 5 5 5 1 3 4 4 2 4;
3 1 3 4 2 3 5 5 5 3 5 4;
4 1 5 4 2 4 4 5 5 3 5 4;
5 2 5 4 5 5 4 5 5 3 5 4;
4 1 3 2 5 4 4 3 3 4 4 4;
5 2 3 2 5 4 4 3 3 4 4 4;
4 1 3 2 5 4 2 3 3 3 3 3;
3 1 3 1 5 3 4 3 3 3 3 3;
5 2 5 3 5 5 1 3 4 4 4 3;
4 1 5 3 5 4 5 3 4 4 4 3;
5 2 3 1 3 5 2 3 4 4 4 3;
5 4 1 4 5 5 4 4 4 5 5 5;
5 1 5 4 5 5 2 4 4 5 5 5;
4 1 3 4 5 4 3 4 4 5 5 5;
4 1 3 3 5 4 4 2 2 4 3 3;
5 1 5 3 5 4 4 2 2 4 3 3;
5 2 1 5 5 5 4 2 3 4 3 4;
5 2 5 5 5 5 4 2 3 4 3 4;
4 1 1 3 5 4 1 4 4 5 3 4;
4 2 3 3 5 3 4 4 4 5 3 4;
5 1 5 3 5 5 2 4 4 5 3 4;
3 1 5 2 5 4 4 2 3 4 3 3;
5 2 5 3 5 5 4 4 3 4 5 4;
4 1 3 3 5 4 1 4 3 4 5 4;
5 2 3 3 5 5 3 5 4 4 5 4;
4 1 5 3 5 4 2 5 4 4 5 4;
5 2 3 3 5 5 1 5 4 4 5 4;
4 1 3 3 5 4 2 4 4 4 5 3;
5 2 5 2 5 5 1 3 5 3 3 3;
4 1 1 4 3 3 4 4 4 4 5 3;
4 2 3 2 5 4 3 4 4 4 5 3;
5 2 5 2 5 5 5 4 4 4 5 3;
2 1 3 3 3 2 2 4 3 4 4 5;
5 1 5 3 5 4 4 4 3 4 4 5;
3 1 3 2 3 2 4 4 5 3 4 2;
5 2 1 2 5 4 2 4 5 3 4 2;
3 1 1 3 3 3 2 5 4 4 3 4;
4 1 5 3 5 4 4 5 4 4 3 4;
5 1 1 2 5 4 2 4 4 3 5 3;
5 2 3 4 5 5 1 2 2 5 2 4;
5 1 5 2 5 4 2 5 5 4 4 3;
5 2 1 2 5 5 2 5 5 4 4 3;
2 1 1 2 4 2 3 5 5 4 4 3;
];
%定义训练样本输入向量
p=p'
t=[8903;8513;8333;11445;12486;
16920;7563;8000;11160;12829;
14674;9511;9346;8889;9715;
8788;10707;7888;12500;15910;
14734;6123;6635;8274;8647;9075;
10113;11172;7527;9455;9317;
14063;12228;12786;9301;7077;
9147;9694;10152;10364;11567
8182;8910;10931;10144;9314
6970;10680;9790;10715];
%定义训练样本输出向量
t=t'
[pn,minp,maxp]=premnmx(p);%对进行训练的输入样本进行归一化处理
[tn,minP,maxP]=premnmx(t);%对进行训练的输出样本进行归一化处理
s1=25;%隐含层神经元的个数
net=newff(minmax(pn),[25,1],{'logsig','purelin'},'traingdm');
inputWeights=net.IW{1,1};
inputbias=net.b{1};
%当前网络层权值和阂值
layerWeights=net.LW{2,1};
layerbias=net.b{2};
pause
clc
%设置训练参数
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.9;
net.trainParam.epochs=5000;
net.trainParam.goal=1e-10;
pause
clc
%调用TRA工NBFG算法训练BP网络
[net,tr]=train(net,pn,tn);
pause
clc
A=sim(net,pn)
B=postmnmx(A,minP,maxP);
%计算仿真误差
E=A-tn
%期望误差
MSE=mse(E)
pause
P2=[3 1 5 2 4 2 3 5 5 4 4 3;
4 1 3 3 5 4 2 4 4 4 4 4;
5 2 5 3 5 5 5 4 4 4 4 4;
5 2 5 5 5 5 4 3 2 4 3 4;
4 1 1 5 5 3 2 3 2 4 3 4;
5 2 3 5 5 5 3 2 3 3 3 3;
5 1 5 5 5 4 4 2 3 3 3 3;
4 1 5 2 5 4 2 4 4 5 4 4;
5 2 5 3 5 5 1 4 4 4 4 4;
];
p2=P2';
p2n=tramnmx(p2,minp,maxp);
a2n=sim(net,p2n);
a2=postmnmx(a2n,minP,maxP);
T2=[11195;9783;10385;8371;8064;7356;7806;10225;8911];
t2=T2';
E2=a2-t2;
%期望误差
figure(1)
plot(B,' g')
hold on
plot(t,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
%预测误差
error=A-tn;
figure(2)
plot(error,'-.*k');
title('BP网络预测误差','fontsize',12);
ylabel('误差','fontsize',12);
xlabel('样本','fontsize',12);
figure(3)
plot((A-tn)./tn,'-.*k');
title('神经网络预测误差百分比');
figure(4)
plot(a2,'-ok');
hold on
plot(t2,'-.*k');
legend('预测输出','实际输出');
title('BP网络预测输出','fontsize',12);
ylabel('函数输出','fontsize',12);
xlabel('样本','fontsize',12);
figure(5)
plot(E2,'-.*k');
title('BP网络预测误差','fontsize',12);
ylabel('误差','fontsize',12);
xlabel('样本','fontsize',12);
figure(6)
plot((a2-t2)./t2,'-.*k');
title('神经网络预测误差百分比')
;
clc
echo off
![神经网络预测误差大]()
3.png
![神经网络预测误差大-1]()
untitled.png |