- 在线时间
- 0 小时
- 最后登录
- 2009-9-12
- 注册时间
- 2009-8-31
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 82 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 27
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   23.16% 该用户从未签到
 |
神经网络预测
! T# [6 u& f' j& d+ K% 数据为1986年到2000年的交通量 ,网络为3输入,1输出
' n0 A+ p* q9 w6 K3 e% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据* \ S) ~9 `# M' a" C/ z
%by akjuan6 {' C5 }( a u1 C) o) I9 O0 \) P: O
%all rights preserved by www.4math.cn
2 C+ x7 F! T% f) OAll_error=[];%所有误差存储
: |- y( N4 y# H {year=1986:2000;%数据是从1986到2000年的
& f. s6 q4 Z! ~3 @+ S( e2 A! q/ Np=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...
* @( }( b6 e* \% C 378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...
# L4 I" w, N3 |$ m) y 527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入1 g! \4 y0 Y) j; t
t=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出
) o/ N" @+ I. W' M& X0 d0 E[normInput,ps] = mapminmax(p);
8 G+ R9 X5 f2 G- @) r- W[normTarget,ts] = mapminmax(t);
& h, H8 F4 Y0 i f& u/ Q% FtestPercent = 0.20; % Adjust as desired
P& h8 N3 P, qvalidatePercent = 0.20; % Adust as desired( ?/ A6 D/ G9 ?' j' u. h# A
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);% p2 D( B9 r) f# @! d5 c# U9 p
for j=1:2003 C5 N: R1 A# K& P
NodeNum1 = 20; % 隐层第一层节点数# R( d% e# `+ i- e7 f: M% z
NodeNum2=40; % 隐层第二层节点数) ] `7 ]# F! ?3 o, k
TypeNum = 1; % 输出维数
' y% E0 `; r: cTF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';) Z; p' {& _' i1 \' d
net=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置$ h1 ^1 n' ]' l6 e) \, E
net.trainParam.goal=1e-6;%训练目标设置
- i2 u! a( j, yPL.lr=0.01;net.trainfcn='traingdm';* L! C/ U+ g; Y
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);
) y( C2 z4 T8 m+ n; d; {[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t& I7 C2 T7 G8 m1 P6 I$ j+ S: _
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t
3 o2 c4 [$ N( l- d7 r& X[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t
5 h8 ~* s. `! c/ O/ ^trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t
* O/ d2 {8 ]; J5 B. a) EtrainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t
3 O, f* y* Q! _; V) B# y. u6 b6 s; zvalidateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t4 Q3 h+ }/ r/ h! j5 h
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t
1 d. r, L4 \( @6 A. N3 h1 EtestOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
- f, T; }0 u- \* H4 H( U4 }testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t$ O! C7 D( s- M/ w9 l$ p
%绝对误差计算- X& \5 K/ p1 A B9 C
absTrainError = trainOutput-trainInsect;
9 x4 v/ _. m. pabsTestError = testOutput-testInsect;
5 ` i; U k! x2 y& `error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);
* @1 C* N8 b k5 zAll_error=[All_error error_sum];- ]1 F/ O3 W" p4 x
eps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别
% ], v% y! y$ ^ f5 p; x5 y% dif ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
+ E! U; C: L0 U4 `7 m2 Csave mynetdata net3 e0 O" F3 J/ N9 l
break
. G: P$ ]. C1 j$ o5 V- `end+ i( i8 F) o5 \! H1 z5 ~$ o
j
( i$ @4 G/ y( f5 e& [( Q2 M4 V3 J1 Xend1 g% Y: N+ v4 T
问题是:
, j6 R7 K; }( ]if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
: |$ B3 _! {$ V- Q$ E; X" |/ p中的30是怎么算出来的啊 |
zan
|