- 在线时间
- 0 小时
- 最后登录
- 2009-9-12
- 注册时间
- 2009-8-31
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 82 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 27
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   23.16% 该用户从未签到
 |
神经网络预测! D2 }5 h2 m( Z& P
% 数据为1986年到2000年的交通量 ,网络为3输入,1输出
0 ?' @4 Y( g% g2 ]" w0 c8 d% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据
( n% c( a) h5 n, X# N%by akjuan
0 D8 P; V7 G2 i# [7 v& m" Q%all rights preserved by www.4math.cn
1 V, W& d) a; O" t% j+ B2 l9 |All_error=[];%所有误差存储8 j' Y, C" r" ~/ f& F+ M0 g
year=1986:2000;%数据是从1986到2000年的
. J7 T: f- Y5 O2 _, I: Tp=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...7 d4 @8 V% S# L# [: w# Y
378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...3 u u/ j, ]/ E/ E
527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入
6 u0 P% [$ G. pt=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出
" t- w$ O, m/ @" r# Q- [( c5 t5 p[normInput,ps] = mapminmax(p);5 G8 B/ l$ E2 I3 o$ E# C: ~2 _$ h- d
[normTarget,ts] = mapminmax(t);. ~3 e- E4 X1 }) y& D- {) V6 O: K
testPercent = 0.20; % Adjust as desired
! f5 z, t2 n7 V3 |* G# KvalidatePercent = 0.20; % Adust as desired
" ^+ d. X( ~( z/ L& h3 I[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
7 k4 v+ V4 M& c! Ufor j=1:200
' {1 h. u0 s: o1 b* \. M4 ~NodeNum1 = 20; % 隐层第一层节点数
' _" X4 f1 l7 U6 ANodeNum2=40; % 隐层第二层节点数
# c3 E. w2 C$ x+ X: XTypeNum = 1; % 输出维数; A( ?. x: N2 K' |
TF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
0 O6 ?2 t4 w8 h* ~; nnet=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置
: f( J5 [7 L7 \6 i1 dnet.trainParam.goal=1e-6;%训练目标设置
8 s x- B) e4 [, t/ lPL.lr=0.01;net.trainfcn='traingdm';& ^" F9 y$ j. e3 H& Q
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);# H, b0 V: {! B; t
[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t
: c2 k9 E( C, E- v[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t d5 r6 E/ _- _
[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t
8 C5 z/ L$ n& b% B, S4 ]trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t" q3 N0 ?' D" V! a8 n) x. ^. l
trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t$ o9 h s% g d. }7 r" o
validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t
5 q9 }1 @% p7 y* r% h0 n2 ovalidateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t; B% j3 [8 W3 g2 |3 B0 L/ g
testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t2 k' G8 K! r5 n& r* x" l
testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t% S0 l! @6 H7 j5 L
%绝对误差计算
. Z9 ^ B: e9 @. B! _+ ]absTrainError = trainOutput-trainInsect;6 C3 ^) M+ ^4 }% s
absTestError = testOutput-testInsect;4 H. N) g# }: ^4 Z2 L
error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);8 b8 H- O+ X1 ]
All_error=[All_error error_sum];6 E9 j% ?8 B" \* `3 G& m
eps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别
- V" N# v" z2 {6 N) a9 ]" wif ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
: c6 \- r& w k1 E1 u/ ]3 ksave mynetdata net$ \0 c: B; ~- `/ B7 J/ I6 z( I
break( M# x4 ]1 g, N& e+ ^9 Z
end2 ]; y: t3 [) b, H3 j5 g9 x
j
! k# S! |; g: c2 Xend
4 Q# R+ g8 q2 c$ m; Y问题是: E( f& K/ k( f5 j S) _
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps)): V' R# T; J3 i- c+ h
中的30是怎么算出来的啊 |
zan
|