- 在线时间
- 0 小时
- 最后登录
- 2009-9-12
- 注册时间
- 2009-8-31
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 82 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 27
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   23.16% 该用户从未签到
 |
神经网络预测* B' {' e7 N0 }. S) f
% 数据为1986年到2000年的交通量 ,网络为3输入,1输出- d1 H# G) ~* \4 D; J% M1 ^; O% b
% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据( D# s' U) W. ^; {, U( h
%by akjuan5 P1 D+ j# }* y. `. w
%all rights preserved by www.4math.cn4 h! P6 d5 b( a q# M7 A; ^
All_error=[];%所有误差存储
8 f# Y N! q ?! Wyear=1986:2000;%数据是从1986到2000年的
- n- g, r- ? k* m. Vp=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...9 b6 d' u8 _/ G+ J1 x; @
378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...
- e4 H6 Y" y, a7 m 527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入
! C. r: Q! X' f3 W% s/ dt=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出2 B% f- p, g4 s
[normInput,ps] = mapminmax(p);& r" `% B) i0 I- i, K: |, f
[normTarget,ts] = mapminmax(t);
( [2 n( M7 R! q4 A4 v+ y5 O4 }testPercent = 0.20; % Adjust as desired% t2 K$ d; s* M, I) Y I
validatePercent = 0.20; % Adust as desired
/ E# s' @" }! w: R- v2 W[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
6 x: K, m$ Z: T' i; wfor j=1:200
& E c7 ^8 p0 a6 l0 }NodeNum1 = 20; % 隐层第一层节点数3 a' K/ s8 O/ B4 ^) v1 d
NodeNum2=40; % 隐层第二层节点数
$ l& x [* J$ v! yTypeNum = 1; % 输出维数
( [9 \! k9 ]8 `( t. ?, l3 N4 NTF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
0 N" T2 K; P8 }net=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置$ B% C. B, ^$ V; P
net.trainParam.goal=1e-6;%训练目标设置
p+ ?; Q K; m4 c$ D' EPL.lr=0.01;net.trainfcn='traingdm';
" h+ w. e8 x, f. n+ N) Y[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);
- m/ I! O; Y9 j5 y3 g7 w( _6 W[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t& M( s5 P, b2 ]; w% l+ I% [
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t* D7 m) V* I+ }5 g# }
[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t5 u1 d6 W/ y2 f) u- P6 C x' {
trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t
$ c. D4 S5 _5 H o. otrainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t1 g/ N D9 Z% f; j% ^9 H
validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t3 D3 l3 I w: e' X: w7 i. J
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t
5 W7 q0 q3 V* \" D; [testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
; O( N' i9 ~( P7 C& dtestInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t
" ` V0 e# {8 \+ i- Z%绝对误差计算
2 A5 C1 `! x# `absTrainError = trainOutput-trainInsect; B+ V0 }$ r/ s9 z: J: @- f% k3 ]
absTestError = testOutput-testInsect;
$ k/ j; Q! R. i; u9 Q* w `error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);
$ f$ \& u# R, w0 a: T' h1 T0 S( oAll_error=[All_error error_sum];
2 S% a0 |$ `/ \% |) S% Veps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别0 E& H) V# u% n( v8 T# u- M" i
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
& Y0 X6 t6 U! Gsave mynetdata net
9 U) s5 [2 i1 R% f! A& @ break1 q4 r& B4 u& g3 M
end, y# q& U. A1 ?% M5 {
j6 ~! P, a/ L# e
end I+ s3 F; _/ {- o, Z, X
问题是:
" o0 x5 l: H7 o; ~; Tif ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
: p" _; _# c( d' o" [中的30是怎么算出来的啊 |
zan
|