数学建模社区-数学中国
标题:
一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 P
All_error=[];%所有误差存储
/ ~) v! o7 _7 a
year=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 m
t=[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- S
validatePercent = 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 L
TypeNum = 1; % 输出维数
$ X9 q/ l" e1 X( a# c V
TF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
! D5 J0 A( {3 g: E
net=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置
' R0 s3 S% `2 Q3 G$ m
net.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得到的结果t
3 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组数据t
5 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- A
testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
( T: h4 |- h8 n! H( C7 q
testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t
# F* N3 e. v0 w1 F5 B ]& f T! F
%绝对误差计算
3 X: D' n: V. j9 K! j
absTrainError = trainOutput-trainInsect;
% J& o" Q( M2 H
absTestError = testOutput-testInsect;
- D! k5 v, r$ T h4 Y
error_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. s
eps=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: t
save mynetdata net
! }# b( b) p3 O8 o6 |# Q7 b
break
1 o. g0 B9 b: d+ ?( z- `
end
* Y1 R; t0 E. B& t
j
6 U0 {: W/ Q( a- J. e, q: q/ K
end
9 z( j( l Z1 a- K
问题是:
. B5 I4 T. R9 H* y" ^" N
if ((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