- 在线时间
- 0 小时
- 最后登录
- 2009-9-12
- 注册时间
- 2009-8-31
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 82 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 27
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   23.16% 该用户从未签到
 |
神经网络预测
1 X- x, T) Y0 e I$ E9 z _2 ?% 数据为1986年到2000年的交通量 ,网络为3输入,1输出4 \! s) o, s2 H" L+ R3 K
% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据" X+ k6 R. R, j$ A) U0 A
%by akjuan
" Z) q9 Z, _- ?%all rights preserved by www.4math.cn: p+ {) d P5 n6 T& K7 y
All_error=[];%所有误差存储
1 z6 L# _1 W, @) C: F6 R/ ayear=1986:2000;%数据是从1986到2000年的
: H1 \3 O6 W' ~; d9 H& Y/ ^! hp=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...
- h. d* K' p: b/ v' I a/ E2 {+ q 378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...
7 K% S# y* p/ a8 A( r. q# O 527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入
: ~7 r* X: n6 x: L2 I! Ut=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出; ^$ [& A& x, m2 m& K
[normInput,ps] = mapminmax(p);/ S2 L/ f$ G M: m: n
[normTarget,ts] = mapminmax(t);
, |- w+ f# F! x" d1 {& H, h0 `3 KtestPercent = 0.20; % Adjust as desired6 E$ l! G' }' t4 t! X
validatePercent = 0.20; % Adust as desired: `3 g& \7 P' Z/ u9 X4 X+ Q# Z
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);1 }5 m( M2 Q: i: i3 U% c ]0 A
for j=1:200
; `+ O k; S% J5 Y4 o( c GNodeNum1 = 20; % 隐层第一层节点数
: J6 R+ i, @8 a" A0 \+ CNodeNum2=40; % 隐层第二层节点数* A4 G! C s1 g4 }# S& l# ?
TypeNum = 1; % 输出维数
" D$ Z9 {4 U3 bTF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';2 s2 _; i$ m! A4 _: l
net=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置
4 p+ b1 f3 H- z% Jnet.trainParam.goal=1e-6;%训练目标设置! |0 G, Q) n; s @% z0 k
PL.lr=0.01;net.trainfcn='traingdm';5 X8 y, ` N4 `# Y
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);& z% ?6 |/ Y" c
[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t2 @6 Y/ g- N( | M! f" M, s8 a% D$ {
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t6 R& N$ c( ?+ F( ]6 z% @: Q+ ?
[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t8 k1 d6 p, i$ L9 L
trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t
U/ m8 I6 G4 F8 z- z' DtrainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t
% U) i( C4 F1 F4 g8 Z( ]validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t) x$ E; D# Y: Q( W) g
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t
" }3 S0 N% H0 ?3 J B& i5 ]testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
" ]% L* f* p4 F- f& j: S2 e7 PtestInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t/ J! o& \4 b* ?3 b4 p G
%绝对误差计算7 g9 s* c5 O' R
absTrainError = trainOutput-trainInsect;
: D0 j6 F/ {" }absTestError = testOutput-testInsect;5 [0 Y& \4 s& z; W: b
error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);
/ m% Z+ T% s' R4 t1 J7 ?9 o- ]: UAll_error=[All_error error_sum];" A9 W g! _% u6 r: s& Y ~& l
eps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别- Q( }! H& Z% ^+ e; M0 `
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps)), s& I6 z3 W. Y1 U/ _6 |: Q
save mynetdata net7 O( q3 ]' [' Y7 Y; X- ?8 D9 Y" ^
break
& J& x. I6 s3 T N3 k: w- Hend5 l; D" c0 \. s: Y
j5 v) p" W, q" b2 K
end7 \6 B1 {6 f U- W( j4 B$ n
问题是:
+ ]5 X; Z9 i9 Tif ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
/ W7 ~. ^0 x& H0 S- E5 O& M中的30是怎么算出来的啊 |
zan
|