数学建模社区-数学中国
标题:
一matlab程序中一点点的小问题
[打印本页]
作者:
yychanaz
时间:
2009-9-10 00:20
标题:
一matlab程序中一点点的小问题
神经网络预测
, G K/ m9 x, K
% 数据为1986年到2000年的交通量 ,网络为3输入,1输出
3 s3 W. j, k' Y( w6 R/ i8 |: J
% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据
# W! j W) r4 j# G5 C$ ^
%by akjuan
& D: B: Y/ C, e+ t
%all rights preserved by
www.4math.cn
* T+ f0 D2 m# L. X
All_error=[];%所有误差存储
# @5 v/ k4 s* E/ \
year=1986:2000;%数据是从1986到2000年的
, i2 w& _' k7 r9 V9 H
p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...
, w/ ^) P$ f4 N. S/ D5 X0 g
378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...
# t0 b8 _$ A: G" `( z! a6 `
527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入
: \; J$ j4 H1 F8 h& p; U1 g, X* M
t=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出
6 V, n& y# ?- }6 Q8 K
[normInput,ps] = mapminmax(p);
% X$ R) n& K7 b0 H: L
[normTarget,ts] = mapminmax(t);
$ v, D& W% e4 c& e8 b
testPercent = 0.20; % Adjust as desired
, L: W |9 m3 Q0 H& E
validatePercent = 0.20; % Adust as desired
9 a0 J1 e% r; S2 B9 x f2 _% A f
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
2 H2 C7 @+ Z @& u# c5 s% v
for j=1:200
" Y3 L8 N0 S, Q1 _4 M8 h6 F
NodeNum1 = 20; % 隐层第一层节点数
9 l9 v8 i" E( m
NodeNum2=40; % 隐层第二层节点数
7 @& w. L4 U N1 d4 a
TypeNum = 1; % 输出维数
( B+ P- w2 [* ]. F. a! D; z
TF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
3 b& c, i1 Z# m2 o! s
net=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置
: c. ^$ n, S0 Q
net.trainParam.goal=1e-6;%训练目标设置
* m3 a1 I/ @$ ?4 U
PL.lr=0.01;net.trainfcn='traingdm';
) {# F- X! k0 p$ u% w; O
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);
/ r+ N) y X6 h% P
[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t
% p3 {8 @3 `6 k# y; i& j! `2 r! O
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t
M) ?( c* x# \" C$ N
[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t
. x: }* q8 V8 a; X2 V o
trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t
# X l9 d5 T& B: d+ |0 m6 n
trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t
" {" O, H$ c( D$ f
validateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t
/ A/ T( v6 u" ]3 O5 e' D" w
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t
- h Q% S J6 Q
testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
- h! I3 L% c% U1 o" V# o
testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t
* l3 _) B d2 _9 s, R
%绝对误差计算
! `8 a7 ~) ]' a1 ^/ H
absTrainError = trainOutput-trainInsect;
4 D! y+ |5 t6 R: z ^3 u
absTestError = testOutput-testInsect;
) q+ J+ p, S' I4 C! w
error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);
G+ O4 a' n, z$ F' k7 v/ N) t: l
All_error=[All_error error_sum];
9 R- D0 Z5 h- \" W! v
eps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别
+ [9 s Q0 E% E7 n+ y) b$ d
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
! }+ C- O& N( p1 V
save mynetdata net
3 [4 K* F# i& | r* C
break
6 e$ f/ C8 X7 }8 i8 k3 T. h$ A
end
+ f; E5 O& H5 \
j
' g0 a& K9 I1 i
end
% o% H }; }& W/ W
问题是:
3 u- `* `$ _$ y* F! t4 Y5 D
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
& N+ y$ Q7 Z4 A" l+ j9 |0 E! v
中的30是怎么算出来的啊
作者:
刚飒雷丝
时间:
2009-9-10 07:59
好复杂啊!看不懂
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5