数学建模社区-数学中国

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

作者: yychanaz    时间: 2009-9-10 00:20
标题: 一matlab程序中一点点的小问题
神经网络预测: F5 K3 [- n9 y: J: v, ]1 a. o
% 数据为1986年到2000年的交通量 ,网络为3输入,1输出+ M; w2 S8 _4 {5 r  ?0 e
% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据5 N$ [) k" M) j8 m8 }+ r  j
%by akjuan
2 T6 {8 J2 s4 Q' ]( D$ D%all rights preserved by www.4math.cn8 S, _4 ^4 L1 b4 h# D& S
All_error=[];%所有误差存储5 J6 {, U$ R8 E4 ~3 v0 B5 t5 D
year=1986:2000;%数据是从1986到2000年的
, n0 T* A! z# y* L, Y3 f1 sp=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...
, M) R8 j; q# s, G% z6 |' I   378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...
9 a" G0 o( k7 |) P. ^. _   527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入/ [9 z( L) K/ ~9 f9 v
t=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出  Q% |9 }+ M5 f7 L
[normInput,ps] = mapminmax(p);9 }" M" h' C) }# n' Z
[normTarget,ts] = mapminmax(t);/ s- f+ T9 c& [) \
testPercent = 0.20;  % Adjust as desired
4 H3 B7 P5 Q; Y6 ZvalidatePercent = 0.20;  % Adust as desired
- M9 G0 N5 m* I& |2 p( k1 _[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);: M) P% _0 P' g+ N
for j=1:200
) [  ~2 P7 C" FNodeNum1 = 20; % 隐层第一层节点数9 q/ V0 K. r# }: q6 z% ]  ~- ^0 I
NodeNum2=40;   % 隐层第二层节点数: m$ q8 Q: s+ t+ g6 \4 C
TypeNum = 1;   % 输出维数
  Q& x1 \8 W, o9 ~" aTF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
2 h$ n' T3 d9 K7 D! `3 \: snet=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置
5 B/ O3 m4 D+ B2 ynet.trainParam.goal=1e-6;%训练目标设置( m9 R, f. G/ k
PL.lr=0.01;net.trainfcn='traingdm';) A2 P. ^" K$ `& q
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);
% F8 F+ k0 G  t2 s% Y' S2 V8 B" f[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t' n, k9 s$ o  K) K/ M3 `
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t
' k& K9 U; G! S( w  D  J1 s* k9 V[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t$ x3 w# B3 C! O/ H
trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t& o0 x' e3 b, |% }  @' i3 i
trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t  Q) Q% O8 u# M; T
validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t
8 o9 U& p3 C- K" DvalidateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t
4 X5 f, F- G1 C+ H1 g/ |& ftestOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t5 T4 C; B2 |7 h, w! l1 n8 _5 H
testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t
$ _- n) v1 K4 R) q7 T* m%绝对误差计算8 `& W) Y8 W& K! h: N
absTrainError = trainOutput-trainInsect;
% [2 Z" K. d; _3 ~absTestError = testOutput-testInsect;
: Q7 Y6 }. b  I5 k( @error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);
& p* {1 A/ D% `* K- UAll_error=[All_error error_sum];
6 [# o# R+ d  L0 o7 Deps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别
/ r& h: t' g) I" N( h3 U' [if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))+ P9 n- m5 S5 g4 s9 o
save mynetdata net
, {, }" r4 ~3 [9 o( h     break
! `% h# u4 h6 c( A3 Gend: `; n4 r  a& X; m
j
8 w- ?) z9 H& a- O# Pend
4 A9 J% [; Q: ?& q问题是:
4 E$ Q+ o# U) Oif ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
4 u, X4 G7 j. w7 r3 T* H8 b中的30是怎么算出来的啊
作者: 刚飒雷丝    时间: 2009-9-10 07:59
好复杂啊!看不懂




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