数学建模社区-数学中国
标题:
一matlab程序中一点点的小问题
[打印本页]
作者:
yychanaz
时间:
2009-9-10 00:20
标题:
一matlab程序中一点点的小问题
神经网络预测
3 r& w* x6 l- N
% 数据为1986年到2000年的交通量 ,网络为3输入,1输出
/ d1 N& V( a, g& O: K
% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据
3 j& a8 O* j* k4 g7 Q0 b1 g
%by akjuan
* w0 v. U: j" ?: }; W$ R3 p4 I
%all rights preserved by
www.4math.cn
9 o, y# p" J1 x6 C( \# T
All_error=[];%所有误差存储
) w* E# L4 ~8 I+ D! U7 n, g- u: ~
year=1986:2000;%数据是从1986到2000年的
" G: R/ H& t. h2 W; F
p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...
! V! N) b( ^5 m1 O0 a0 y
378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...
- [: D- W, `$ E E
527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入
6 i7 A! \ M/ d% S, h0 X
t=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出
1 N, c @, r+ n8 k+ E, E
[normInput,ps] = mapminmax(p);
& Y& | G* |; \- k7 B
[normTarget,ts] = mapminmax(t);
7 O+ {1 v* g& n+ M9 z2 w' a# l
testPercent = 0.20; % Adjust as desired
; w9 M4 y/ `9 Y
validatePercent = 0.20; % Adust as desired
# _) V: E% I/ ?# C& q
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
, f* D2 { l$ m2 V: g3 J2 a8 l
for j=1:200
# o2 [2 t4 {! }8 K" i# Q
NodeNum1 = 20; % 隐层第一层节点数
9 I) z( O% D% j, G0 W
NodeNum2=40; % 隐层第二层节点数
7 p5 s3 P9 s2 ~5 L# c) h/ Z% M
TypeNum = 1; % 输出维数
* y `0 j9 p+ B) }
TF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
" R$ S( L2 P6 ^" P
net=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置
1 Y G9 D0 R/ o& |8 }# I
net.trainParam.goal=1e-6;%训练目标设置
1 S, G1 |3 `1 x, o# c
PL.lr=0.01;net.trainfcn='traingdm';
7 {; W4 E. i. K0 {; ? J
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);
9 B5 J" s) N+ x% ]' i: Z
[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t
& S9 k: \% m! k" ^' d- N
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t
4 s1 k$ o8 C# V: x; {/ j
[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t
( @! F7 m: W8 h1 t
trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t
8 N- q1 _% L ~3 M. u X3 |4 Z
trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t
4 ]7 F( `; N- N; ]* F
validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t
. I5 l) K3 i& w6 }2 B! {
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t
1 N0 s4 H2 h! c' M
testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
) i9 h+ ]: |: L% C
testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t
& e0 {1 ~, B/ X5 R+ u+ [
%绝对误差计算
' h9 A7 [! P& ]8 c
absTrainError = trainOutput-trainInsect;
9 a0 e4 J3 X2 \; v1 k
absTestError = testOutput-testInsect;
+ X# V3 Z* h6 ^" b
error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);
0 N+ v ]/ J1 }
All_error=[All_error error_sum];
; X9 k i1 Y O( n& U, v
eps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别
. }% e6 h" ^% W
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
% z5 W# l4 S& p% i4 w y N" {; m' ?7 m
save mynetdata net
3 y5 Y8 L* Z8 o8 f; g Y. D. Z r
break
7 L+ @6 Y+ G) z) @
end
) @* O1 g1 L& X. F7 `, e
j
" J* ?5 K+ W; t+ h4 P
end
- B) d# e5 q9 x* W; J
问题是:
$ `6 A' {. Y4 l
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
3 C+ M8 p: i( |* j% S! k
中的30是怎么算出来的啊
作者:
刚飒雷丝
时间:
2009-9-10 07:59
好复杂啊!看不懂
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5