数学建模社区-数学中国
标题:
一matlab程序中一点点的小问题
[打印本页]
作者:
yychanaz
时间:
2009-9-10 00:20
标题:
一matlab程序中一点点的小问题
神经网络预测
3 ]; i- n! x' l- I2 A/ o
% 数据为1986年到2000年的交通量 ,网络为3输入,1输出
" l$ ?( \9 X7 v8 S8 z
% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据
# i: L& K; k% \- |* J
%by akjuan
2 ^3 u/ C- J% O9 _8 h) f( R0 u
%all rights preserved by
www.4math.cn
8 Q) f7 M! B1 L9 }4 i( ~, O5 o
All_error=[];%所有误差存储
3 X) A0 h L& i' _
year=1986:2000;%数据是从1986到2000年的
3 h% t- M! A ~* q
p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...
1 _* g9 G% [7 T% b+ l' q, A
378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...
. n+ e6 P! e' [% t$ U& e! ?
527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入
9 B' [9 p$ [ e5 B% ]# S
t=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出
. g* h. A5 i! P3 e
[normInput,ps] = mapminmax(p);
' N( @( A. O+ F6 ^
[normTarget,ts] = mapminmax(t);
, ~7 ^' e# H$ S
testPercent = 0.20; % Adjust as desired
+ k' t& |+ U! m" t
validatePercent = 0.20; % Adust as desired
. f+ _, I0 f) @ H
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
0 P* O$ S3 M% h# @$ A
for j=1:200
( }& {' u/ m8 d G9 K2 U
NodeNum1 = 20; % 隐层第一层节点数
4 a0 a! B& x, s/ s
NodeNum2=40; % 隐层第二层节点数
8 ^# W2 l1 S. d6 i
TypeNum = 1; % 输出维数
5 g8 F3 A# Z4 t' T3 \! f' u
TF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
; J: L7 P% W* S. ]8 z1 h+ g: |: c
net=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置
k+ ^3 y+ o- }
net.trainParam.goal=1e-6;%训练目标设置
+ `* A/ q' Q1 F, c3 _) r
PL.lr=0.01;net.trainfcn='traingdm';
' i, a5 m+ ^) c8 d( W3 H8 `! V
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);
& j2 ^; W3 s+ I8 i& A4 ]4 E$ U; R
[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t
: _4 n$ O2 A9 `3 S( o3 b
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t
* H# L- T' v& p% ^% T5 @( j" N
[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t
/ y1 E" k! A } z; J, c6 n
trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t
9 z Z9 ]$ b! j- l0 g" b
trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t
+ I9 D& a. b# g; J, E- }+ h
validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t
3 p+ s3 L7 }- m; j% j4 p: G
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t
2 d; M ] @, J. d; ?- D5 L
testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
3 m! o) D+ [3 x
testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t
2 ~ T6 F. J) w0 `8 m
%绝对误差计算
7 h' D. u# n/ Z: @6 B" g V# d
absTrainError = trainOutput-trainInsect;
! J* E9 c+ ]- Q; y2 |7 z5 w! P* W, A1 P
absTestError = testOutput-testInsect;
) E: o( N8 e! Z5 B2 c5 @0 {1 K
error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);
5 z* U+ D) P* A
All_error=[All_error error_sum];
5 t h _2 H+ t9 O0 C' w+ X4 Q
eps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别
}' v+ p4 ^: }( W/ H s
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
4 c2 R8 l9 c% U- F1 y$ h
save mynetdata net
; b4 ?8 Z( A: s/ c
break
8 E* O+ z0 \2 M3 A: z
end
- w. M7 u0 q* p
j
1 x( l# g0 ?0 v+ [0 h' {
end
# s. l8 G A# b
问题是:
7 d- ?. t# ~& @
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
9 B! T3 I0 E" g: x5 G8 K
中的30是怎么算出来的啊
作者:
刚飒雷丝
时间:
2009-9-10 07:59
好复杂啊!看不懂
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5