- 在线时间
- 0 小时
- 最后登录
- 2009-9-12
- 注册时间
- 2009-8-31
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 82 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 27
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   23.16% 该用户从未签到
 |
神经网络预测
+ {5 X" _. c9 D, D) \8 X$ H- m% 数据为1986年到2000年的交通量 ,网络为3输入,1输出$ X2 [" D7 x1 ]: [6 C
% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据5 _0 ]2 ~ G' l0 a
%by akjuan
9 O! R* A' P; [* C. R%all rights preserved by www.4math.cn" v& Z: z$ u! [. E) ?3 D5 o
All_error=[];%所有误差存储
4 _7 m4 t6 Z( J: L4 Zyear=1986:2000;%数据是从1986到2000年的$ J1 H3 G( n5 P8 e. {
p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...; s$ g6 G7 t5 Z
378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...
& l/ Q" _5 `' H( ~4 k 527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入
: d6 ?6 G- G2 `8 gt=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出
+ w5 c E+ @% k3 p$ C# K9 E[normInput,ps] = mapminmax(p);
: l: i. A$ Z7 F) b8 }9 k3 z[normTarget,ts] = mapminmax(t);) w1 i' f% x1 b, c8 @9 r( ]
testPercent = 0.20; % Adjust as desired
! R0 e' F! [: H, B. qvalidatePercent = 0.20; % Adust as desired
' ^4 W- I# |; @4 c: X. Q) C[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);/ b/ G; c0 c$ q( }& [& g) `
for j=1:2001 H8 Y; G# |6 m" a
NodeNum1 = 20; % 隐层第一层节点数
& w: i; ?5 z' ^NodeNum2=40; % 隐层第二层节点数# G1 b- M. E3 ^+ J
TypeNum = 1; % 输出维数2 t9 N( e3 q# ~; c. G
TF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig'; |* {" M" p0 U% j9 f3 a
net=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置; [% z" X1 _/ h c) T% s
net.trainParam.goal=1e-6;%训练目标设置
9 q) e( A2 s6 K$ d& L, wPL.lr=0.01;net.trainfcn='traingdm';6 t. ]* ~0 f3 P' y3 ?1 l9 D* P" \& o- V
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);5 E& T2 [ n# U5 M! H; p
[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t3 y Z U0 S$ Z: p- Y) Y! F
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t+ f# G% Q( _$ t0 L6 N/ n5 L1 k
[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t
5 w8 V% p/ {( K( H: b! C. b% Z/ `8 vtrainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t4 F' }- N: M5 c3 X# W
trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t! k) x5 X5 l/ x9 r7 E
validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t8 [* N" V5 T# @9 j9 w
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t$ h/ v0 j3 v/ |" `2 K
testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t4 E/ L# b& }1 ?* J# D
testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t) Q7 W7 `$ y. Y+ }, P
%绝对误差计算; T( U: a- e- G4 U5 N4 u8 N: F
absTrainError = trainOutput-trainInsect;. I( b" D$ d2 D z
absTestError = testOutput-testInsect;
4 U! G6 I2 A! F: O2 T3 yerror_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);/ k9 l! T$ A4 N4 P/ |7 N
All_error=[All_error error_sum];
: q6 o+ `& w- A: R( Y6 jeps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别. ?, M& t m+ l1 X/ c2 E
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
( V' k8 f. D' c# B' l8 D6 Gsave mynetdata net
* }( f+ f. e ~7 h* e2 F3 i' A break/ p- O$ E0 N: f
end5 o4 l* Q: v0 G# w& b. Z
j! _$ ^$ K8 O) ?
end
5 l# {7 h: ]" b# y6 B问题是:
! z& f. j8 p) L/ zif ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
; z. n% \% j! o. n2 E. B; l' t7 h中的30是怎么算出来的啊 |
zan
|