- 在线时间
- 0 小时
- 最后登录
- 2009-9-12
- 注册时间
- 2009-8-31
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 82 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 27
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   23.16% 该用户从未签到
 |
神经网络预测
' U" X: i5 q: [! R s* q3 _6 U5 O- ^% 数据为1986年到2000年的交通量 ,网络为3输入,1输出) \2 v( J' G- L: i2 e6 N1 x
% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据
3 {8 n/ m; n3 O%by akjuan' J2 k% n D" J0 T& ?7 e( r
%all rights preserved by www.4math.cn
' m6 P# I4 m2 _All_error=[];%所有误差存储
, n+ f8 \; `. T3 U, @year=1986:2000;%数据是从1986到2000年的5 |7 T ]" T; D5 j
p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...2 n) @6 {. E2 ]( w( @
378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...
( F1 C; A) o* B! r8 D 527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入
7 M- F; @) N& }: F1 B0 |+ g3 q0 b7 ct=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出+ P8 x5 j7 |4 m9 S9 z! k
[normInput,ps] = mapminmax(p);
/ H3 M3 W9 K5 _[normTarget,ts] = mapminmax(t);& G! O* Z' B% T" i- v
testPercent = 0.20; % Adjust as desired/ Q" e ^' U1 ^; a0 X
validatePercent = 0.20; % Adust as desired2 m: M8 ~/ R2 \2 W8 b
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
% R% A4 p _8 T# ^/ Vfor j=1:200
0 {1 y, [7 I l; F$ ]2 w! `# y9 n0 INodeNum1 = 20; % 隐层第一层节点数1 L( c' ]) u9 p% T! W
NodeNum2=40; % 隐层第二层节点数
& A; b* a' |) d9 }TypeNum = 1; % 输出维数6 X" `, U7 N. y
TF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
- r6 D( U* w( c. I" v3 x wnet=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置# T- ~' c( t: M
net.trainParam.goal=1e-6;%训练目标设置2 a: {- L0 F8 Q9 ]4 p9 \: `
PL.lr=0.01;net.trainfcn='traingdm';( y) Y" l1 v' g" D
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);
) F# m# Z) X) I& m% m8 }4 m7 i. n[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t% E: ?; L& r. o7 u8 N7 u, @ V8 b
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t& {# `: [' Z& S2 T5 M5 ]2 |8 Z, B, b
[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t& O' B1 v& C1 W1 S& I. Y5 q D
trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t7 m/ L. _5 y, d! x3 s5 T' T9 Q( C
trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t+ k M! H5 X6 P4 t
validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t' ~$ l$ f% k2 v/ N6 @
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t2 \- a# }# J9 \# G2 U
testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
D5 K6 x0 m( k* z9 p2 q6 O# ttestInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t
- M3 H2 H& m3 Z%绝对误差计算+ `) u8 F9 h) O+ @$ {$ w# K
absTrainError = trainOutput-trainInsect;4 v$ T+ Z) r+ R5 U7 E
absTestError = testOutput-testInsect;2 S6 C3 W K* U2 l4 z6 `- |; Z
error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);, N% J+ e4 I* {6 f/ Z& q7 S8 l
All_error=[All_error error_sum];# S' K; t5 `# Z6 L P+ R: H
eps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别; e$ C. y7 z2 P. G) `
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))+ ?$ b( c8 |4 W- G
save mynetdata net, [0 ~; v8 v' H9 y; [" m# `
break
; G' S# _6 y3 [% q" r: qend$ X3 Z( g% O, H6 w* U2 ~7 p" W3 Q
j
* L: ]7 M8 Y- E r: L6 Pend$ i. Z5 Q9 Y, E0 a2 Z
问题是:
" e5 L" L7 v: U) y" ^& {) b5 c Z9 Pif ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
1 A9 O# [4 |+ P中的30是怎么算出来的啊 |
zan
|