数学建模社区-数学中国

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

作者: yychanaz    时间: 2009-9-10 00:20
标题: 一matlab程序中一点点的小问题
神经网络预测
: J. [2 a3 k* C5 z$ Z% 数据为1986年到2000年的交通量 ,网络为3输入,1输出
5 \/ E, Z1 T& e  y% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据1 Q: W$ e7 D& [
%by akjuan! g, l$ Y1 c/ l3 t$ W1 h
%all rights preserved by www.4math.cn
/ [% o; }) ?- S+ mAll_error=[];%所有误差存储
+ _0 N/ V0 p3 O( Lyear=1986:2000;%数据是从1986到2000年的) o: p  b5 ^# D
p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...3 J0 r# d: L4 W. [2 w
   378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...
2 D" E5 w+ x. a2 @   527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入( i5 l9 |* c" ~6 y
t=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出7 p# Q/ d( n9 y: v8 ~4 K
[normInput,ps] = mapminmax(p);
8 v* `0 g: k) Q5 j[normTarget,ts] = mapminmax(t);
, s7 G: F& A9 U# MtestPercent = 0.20;  % Adjust as desired
, N0 `6 A' L& {: Z" ^& vvalidatePercent = 0.20;  % Adust as desired
$ j) Q' Y1 H' r$ `2 q+ r[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
% `* P; l1 |! s5 h) Nfor j=1:2006 k* X+ m' V5 }6 ?0 Y6 [
NodeNum1 = 20; % 隐层第一层节点数
7 N1 a& S9 i1 ?2 N$ CNodeNum2=40;   % 隐层第二层节点数
  m$ n" [% _" l' s0 ?! b$ s0 bTypeNum = 1;   % 输出维数
2 a. k4 }, W  F/ p6 {1 VTF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';+ r- _) W3 z: U! h! `9 I- q
net=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置
/ `8 h+ J% {( p3 m8 ~% @net.trainParam.goal=1e-6;%训练目标设置( c: e- b# ]& A6 S
PL.lr=0.01;net.trainfcn='traingdm';
- F4 f) ~( w6 F$ w7 O( l& O, K[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);8 b5 f0 [  F! L5 s; j$ C2 c, Z( ]
[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t
" r  |7 I  v" o+ A" B[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t
; ]4 H9 _  W& {8 r$ u[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t
0 x8 e  v1 ^: o3 m, @trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t
( {- W2 @$ [9 A. `% p1 m. U  v4 rtrainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t
8 \+ a1 n+ ]$ O/ lvalidateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t* @. `! {# ]* [  {" X" s- c# v& ^; u" w
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t3 s( c1 ?, V8 D( W
testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t7 ?4 H8 h; x; X2 z& J* y2 ], H
testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t
2 ~& p" @% h, p, U%绝对误差计算! U8 O1 ^# o* @% v4 ?& M4 e
absTrainError = trainOutput-trainInsect;
; {2 t' W* _2 u) a; y; q( _absTestError = testOutput-testInsect;
+ W, ^+ J4 p2 X4 }2 S7 s( n4 u0 Werror_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);; ~) t- P; c. f  {2 I, l
All_error=[All_error error_sum];  p* c* F$ A: @
eps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别
" b+ f' ?0 S( d5 Y4 ]if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
& ]. f- q; y. Q1 _/ L5 ^6 vsave mynetdata net
% K; G$ C5 w# p( S  Q8 D7 d4 x     break
1 o- O4 ^5 D* B* V6 A" [end% d  L9 w  Z( F$ M
j
. k( x# u$ l7 W' n% o* z' f. E5 Cend  `, N. s7 ^8 a( T& V
问题是:* O; z. h' ^6 D) B
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
, V" N' E' A/ X, n! z( `中的30是怎么算出来的啊
作者: 刚飒雷丝    时间: 2009-9-10 07:59
好复杂啊!看不懂




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