数学建模社区-数学中国

标题: 一matlab程序中一点点的小问题 [打印本页]

作者: yychanaz    时间: 2009-9-10 00:20
标题: 一matlab程序中一点点的小问题
神经网络预测
# A# C3 d2 a: {, S% 数据为1986年到2000年的交通量 ,网络为3输入,1输出' O7 K0 |, b1 H; }  M$ @9 W
% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据
- \, I' f' w# G5 r7 h%by akjuan
& ^2 R  R7 n3 [  u) x%all rights preserved by www.4math.cn
/ u3 m6 e# A; k. |: v" {" l$ V8 PAll_error=[];%所有误差存储
/ ~) v! o7 _7 ayear=1986:2000;%数据是从1986到2000年的3 L5 B7 ?, T, b& ?  ]
p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...
1 W+ E# J: ^( [   378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...
" m# _1 c4 }4 ~" q* W% I   527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入
. y8 D4 Y. O3 d2 i4 mt=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出
/ }+ b/ L' Q( Y; I% Z1 U. x[normInput,ps] = mapminmax(p);
1 s& U' [9 o- r% J; q. Q/ [[normTarget,ts] = mapminmax(t);: y7 p; k/ g( g4 @& Y4 i
testPercent = 0.20;  % Adjust as desired
+ C* _4 G; D- SvalidatePercent = 0.20;  % Adust as desired+ |4 x$ Z) Y& O+ U; [+ P3 N  {) o
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);. Z& J; i8 J% c2 \; T
for j=1:200
. n5 T6 A$ U0 v" _NodeNum1 = 20; % 隐层第一层节点数8 L9 c. x+ n$ [8 t/ Q- k
NodeNum2=40;   % 隐层第二层节点数
+ S6 l: |4 G# S7 `2 s1 n2 LTypeNum = 1;   % 输出维数
$ X9 q/ l" e1 X( a# c  VTF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
! D5 J0 A( {3 g: Enet=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置
' R0 s3 S% `2 Q3 G$ mnet.trainParam.goal=1e-6;%训练目标设置
  _3 n0 t' j. w- Q4 l2 [/ [PL.lr=0.01;net.trainfcn='traingdm';; d" v% y4 r- X+ r- @* W
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);
4 L: w8 ]% c" h/ r[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t
6 q4 r: a6 `7 @3 q, P, t9 S% D[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t
$ Z& C6 X( ]) M& Y# C( U' S[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t3 d3 ?" p2 U4 q& A7 O  |
trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t% z7 {. j$ q& B5 x+ y5 |) D
trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t5 u& `. g4 _6 k/ l* K# O. o3 p
validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t
4 ~" Y- Z" R  i) \3 ^validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t
9 e" g* d0 q/ e3 H3 C4 q2 Q3 I- AtestOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
( T: h4 |- h8 n! H( C7 qtestInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t# F* N3 e. v0 w1 F5 B  ]& f  T! F
%绝对误差计算
3 X: D' n: V. j9 K! jabsTrainError = trainOutput-trainInsect;
% J& o" Q( M2 HabsTestError = testOutput-testInsect;
- D! k5 v, r$ T  h4 Yerror_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);: r; b/ B2 K4 ~% m; t6 C, `
All_error=[All_error error_sum];
- c1 f: [7 G. seps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别4 ]% c- c/ {" D
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
3 n6 o, |' G, r- {" {$ R: tsave mynetdata net! }# b( b) p3 O8 o6 |# Q7 b
     break1 o. g0 B9 b: d+ ?( z- `
end* Y1 R; t0 E. B& t
j
6 U0 {: W/ Q( a- J. e, q: q/ Kend9 z( j( l  Z1 a- K
问题是:
. B5 I4 T. R9 H* y" ^" Nif ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
' y: n5 {4 |  n/ X% u) y1 v" F# U中的30是怎么算出来的啊
作者: 刚飒雷丝    时间: 2009-9-10 07:59
好复杂啊!看不懂




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5