- 在线时间
- 0 小时
- 最后登录
- 2009-9-12
- 注册时间
- 2009-8-31
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 82 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 27
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   23.16% 该用户从未签到
 |
神经网络预测
% V# }4 F' b. z, `1 u. G% 数据为1986年到2000年的交通量 ,网络为3输入,1输出7 v9 f3 H @; p A& c+ P
% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据
6 ^# U/ y( J: M7 P: v- S%by akjuan
1 F. t3 S0 g' `5 H* N9 ?%all rights preserved by www.4math.cn4 `$ B$ ~1 k3 C6 Q
All_error=[];%所有误差存储, p# j! Q p, E0 S# O4 `; o( d$ `
year=1986:2000;%数据是从1986到2000年的0 m! ?! I$ s( L; T! A: v. R z0 w
p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...9 U. ~$ y9 b# \% U
378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...8 }5 W( {. _6 Q0 P& m1 E) e6 q
527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入2 G1 m7 P) C# m, `% J) b. v5 j
t=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出
! I- o2 U2 {: v# W2 K( `[normInput,ps] = mapminmax(p);
, [5 m/ |7 o8 S1 }: c9 j1 p[normTarget,ts] = mapminmax(t);; \" j/ }7 }4 Y! J( \
testPercent = 0.20; % Adjust as desired* J2 v' W2 k( Q7 Y/ V9 |
validatePercent = 0.20; % Adust as desired2 P: m5 w5 l' ?9 ~& B
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
5 i% \' I, c6 M! u% Nfor j=1:200
" s; }7 p; N& B4 SNodeNum1 = 20; % 隐层第一层节点数
+ i: w! j* P5 h% y$ L4 _, Y kNodeNum2=40; % 隐层第二层节点数2 R# V- e* n y5 \3 r# d) {
TypeNum = 1; % 输出维数
! l7 H! O# O9 j5 U+ NTF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';: \# i: P- I9 R! t
net=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置: V; G( [+ G, Z+ i
net.trainParam.goal=1e-6;%训练目标设置' Z- }0 v$ K6 _; `
PL.lr=0.01;net.trainfcn='traingdm';+ g, c. J, S3 t% h3 T
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);
9 n5 d7 C1 x; `3 v; F- v# g[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t
$ V) i/ Y: i) {& z9 J. M[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t" z! ], k+ f6 _2 q' D& M+ f
[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t( _6 D) J: s* N9 B% s& D6 w" L6 E
trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t
# Q2 N: K# H9 ^9 |- A& S. ktrainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t
( l" j' m: G! H$ |+ LvalidateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t A! d+ X, T/ I1 ]
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t
/ F2 y, T9 V" _% t* v% wtestOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t5 _/ L0 i6 P+ h5 X+ ^
testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t2 u4 M2 k: G6 n
%绝对误差计算/ q0 V" q# k1 }6 o( N
absTrainError = trainOutput-trainInsect;. V/ M$ O/ U/ _' X4 ]( m
absTestError = testOutput-testInsect;) B6 g: P% d2 ~
error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);% f7 Y7 b2 A% h; h" q* v6 h3 y
All_error=[All_error error_sum];
2 M4 z$ L5 Y8 e5 keps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别7 z3 U& @+ b K# i/ N
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
. k- r/ R3 A3 |8 Z/ Ksave mynetdata net7 m0 D) N- I# t0 ]3 o
break6 C {9 e5 H; a! Z
end9 M) b* T6 l6 E5 {$ X! f
j
/ n) W7 Y: ^7 r- K" O5 nend% g- U8 q3 i6 Y3 r- l4 J% Z6 S+ W
问题是:
* k/ W9 S& m; s7 p; Tif ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))" n( P- z1 G0 b5 e
中的30是怎么算出来的啊 |
zan
|