数学建模社区-数学中国

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

作者: yychanaz    时间: 2009-9-10 00:20
标题: 一matlab程序中一点点的小问题
神经网络预测
, G  K/ m9 x, K% 数据为1986年到2000年的交通量 ,网络为3输入,1输出3 s3 W. j, k' Y( w6 R/ i8 |: J
% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据# W! j  W) r4 j# G5 C$ ^
%by akjuan& D: B: Y/ C, e+ t
%all rights preserved by www.4math.cn
* T+ f0 D2 m# L. XAll_error=[];%所有误差存储# @5 v/ k4 s* E/ \
year=1986:2000;%数据是从1986到2000年的, i2 w& _' k7 r9 V9 H
p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...
, w/ ^) P$ f4 N. S/ D5 X0 g   378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...# t0 b8 _$ A: G" `( z! a6 `
   527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入: \; J$ j4 H1 F8 h& p; U1 g, X* M
t=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出
6 V, n& y# ?- }6 Q8 K[normInput,ps] = mapminmax(p);
% X$ R) n& K7 b0 H: L[normTarget,ts] = mapminmax(t);
$ v, D& W% e4 c& e8 btestPercent = 0.20;  % Adjust as desired
, L: W  |9 m3 Q0 H& EvalidatePercent = 0.20;  % Adust as desired
9 a0 J1 e% r; S2 B9 x  f2 _% A  f[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
2 H2 C7 @+ Z  @& u# c5 s% vfor j=1:200
" Y3 L8 N0 S, Q1 _4 M8 h6 FNodeNum1 = 20; % 隐层第一层节点数9 l9 v8 i" E( m
NodeNum2=40;   % 隐层第二层节点数
7 @& w. L4 U  N1 d4 aTypeNum = 1;   % 输出维数( B+ P- w2 [* ]. F. a! D; z
TF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
3 b& c, i1 Z# m2 o! snet=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置
: c. ^$ n, S0 Qnet.trainParam.goal=1e-6;%训练目标设置* m3 a1 I/ @$ ?4 U
PL.lr=0.01;net.trainfcn='traingdm';) {# F- X! k0 p$ u% w; O
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);
/ r+ N) y  X6 h% P[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t% p3 {8 @3 `6 k# y; i& j! `2 r! O
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t
  M) ?( c* x# \" C$ N[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t. x: }* q8 V8 a; X2 V  o
trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t
# X  l9 d5 T& B: d+ |0 m6 ntrainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t" {" O, H$ c( D$ f
validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t/ A/ T( v6 u" ]3 O5 e' D" w
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t- h  Q% S  J6 Q
testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t- h! I3 L% c% U1 o" V# o
testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t* l3 _) B  d2 _9 s, R
%绝对误差计算! `8 a7 ~) ]' a1 ^/ H
absTrainError = trainOutput-trainInsect;4 D! y+ |5 t6 R: z  ^3 u
absTestError = testOutput-testInsect;
) q+ J+ p, S' I4 C! werror_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);  G+ O4 a' n, z$ F' k7 v/ N) t: l
All_error=[All_error error_sum];
9 R- D0 Z5 h- \" W! veps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别
+ [9 s  Q0 E% E7 n+ y) b$ dif ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))! }+ C- O& N( p1 V
save mynetdata net
3 [4 K* F# i& |  r* C     break6 e$ f/ C8 X7 }8 i8 k3 T. h$ A
end+ f; E5 O& H5 \
j
' g0 a& K9 I1 iend% o% H  }; }& W/ W
问题是:
3 u- `* `$ _$ y* F! t4 Y5 Dif ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
& N+ y$ Q7 Z4 A" l+ j9 |0 E! v中的30是怎么算出来的啊
作者: 刚飒雷丝    时间: 2009-9-10 07:59
好复杂啊!看不懂




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