- 在线时间
- 0 小时
- 最后登录
- 2009-9-12
- 注册时间
- 2009-8-31
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 82 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 27
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   23.16% 该用户从未签到
 |
神经网络预测7 [ E$ F/ q: d: {- H; w
% 数据为1986年到2000年的交通量 ,网络为3输入,1输出
5 w* D1 b( _* u& s6 a% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据
' S7 q0 R4 W" W# L. {%by akjuan- R2 H0 h) b2 u: N3 \
%all rights preserved by www.4math.cn+ t+ I! h$ @" c& M9 ^+ a6 }; P
All_error=[];%所有误差存储
1 N1 ?* \/ ^* V' j# I& B- S% } iyear=1986:2000;%数据是从1986到2000年的
6 C/ e$ n! |% V. M5 a. ~p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...* b; q# o/ P# y1 Y3 {! O; r1 P3 q
378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;.../ b, B9 S$ X0 f" {
527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入% T0 v& z d$ F8 u$ Y4 E
t=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出, B' Z8 y2 a# I% E1 T
[normInput,ps] = mapminmax(p);
3 q( T3 w G/ W" Y[normTarget,ts] = mapminmax(t);; M7 w# |6 K$ I- ~8 R* m' H
testPercent = 0.20; % Adjust as desired$ O2 l9 U8 X0 j
validatePercent = 0.20; % Adust as desired ]% b7 b' C- V, L+ B: X
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);: [/ L% {& ^" x! H8 }2 Q8 t# g* ]
for j=1:200
( E$ L7 t) ^, ]$ t- GNodeNum1 = 20; % 隐层第一层节点数8 y# T6 b% P& s. C/ H1 A1 i! t1 @
NodeNum2=40; % 隐层第二层节点数
3 h& K: G6 G# C1 ]6 s' M: vTypeNum = 1; % 输出维数
& _6 P# u" ?$ }5 r! h4 [TF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
& F, y0 Q$ |7 Y0 |( Knet=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置, u) Q$ a/ {, \( A
net.trainParam.goal=1e-6;%训练目标设置
# G, g2 |( |, F% ^5 ~' C+ N9 zPL.lr=0.01;net.trainfcn='traingdm';) f+ W. Z* U4 d% }8 g8 h6 ?8 }
[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);8 x4 L9 I3 L R2 b
[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t( q8 b( a3 Z$ Q+ I) |1 T7 F
[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t; s' s* u; q3 W
[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t
# C( H% ^. b/ x' UtrainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t1 R4 {) E4 M: `% o7 K
trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t
$ z- A O6 [" A: ~3 e& m. J7 EvalidateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t
: ^9 g& V j! |7 s( ]& v% V, YvalidateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t9 D, R8 I) k% p" b% r1 ^& ~; o
testOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
3 y3 y9 \ g: C# _; S- ~testInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t% G# `1 T7 k3 X
%绝对误差计算3 B/ {9 v: ?' U5 I
absTrainError = trainOutput-trainInsect;
+ o8 r1 K4 _- c* P% x# `) babsTestError = testOutput-testInsect;
. g \ @: O9 O2 |error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);% ]5 ~8 \ [* `. ~9 G2 F
All_error=[All_error error_sum];
& U4 z4 S2 ]% j+ }* p: h1 W4 Veps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别
2 L2 u/ ^$ p6 V( _9 L: d9 @+ `if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
3 P" W& i& e0 n* A2 a: ]# T) Wsave mynetdata net. h* ~4 I/ y/ l' M( ^+ Q
break: l7 R b a" ~. B }
end
. D% @2 [6 Y2 k$ t, J, X8 I [$ oj: C# B) p7 K# w; K
end
7 W2 i6 Z9 G7 e; o u" V1 P问题是:- ^) z; o$ A! ?6 G0 n/ e' K4 k' y
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
& Z& i* f# I+ G中的30是怎么算出来的啊 |
zan
|