- 在线时间
- 0 小时
- 最后登录
- 2009-9-12
- 注册时间
- 2009-8-31
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 82 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 27
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   23.16% 该用户从未签到
 |
神经网络预测
/ O {+ e7 j+ T' s% K$ g7 \) I% X/ H% 数据为1986年到2000年的交通量 ,网络为3输入,1输出
$ |7 j& C7 ^% q% S( s% 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据
/ v2 v& U: S5 B$ T* {+ M4 J%by akjuan: l# v6 i/ g' \; a) t& R7 w4 B9 f
%all rights preserved by www.4math.cn
4 X7 A( ~( ?2 q9 J4 f/ E: F- v/ C7 x' \All_error=[];%所有误差存储
+ c& U4 G; o4 y5 l/ v) _+ nyear=1986:2000;%数据是从1986到2000年的; D9 I7 n; Z N6 K
p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;...9 R [1 t+ V% J% e7 {
378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;...2 j* l1 I$ k5 N3 \- O5 P# i/ _' B
527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输入数据,共15组,每组3个输入
9 v0 @/ L1 m. y6 {* It=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出3 [( }' [; J% e* s% k4 p8 {0 S
[normInput,ps] = mapminmax(p);3 r6 B% J, d1 J6 g! x( E% o
[normTarget,ts] = mapminmax(t);
7 b& X( L! a" I! z9 I4 EtestPercent = 0.20; % Adjust as desired
3 e* E( A- _: T" u& NvalidatePercent = 0.20; % Adust as desired4 s" _ I) a- H) M
[trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,testPercent);
F/ V9 J+ \2 I# s G$ ifor j=1:2006 e+ h1 } A5 s3 D
NodeNum1 = 20; % 隐层第一层节点数* l: I2 r4 L' x. h& U- Z2 \3 r0 E" s
NodeNum2=40; % 隐层第二层节点数& e# \+ g b, N; g& C. ?: b3 r" U
TypeNum = 1; % 输出维数
: s3 [7 c) X2 g8 Z/ e+ `& uTF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';
* `1 U+ V$ w' e1 Mnet=newff(minmax(normInput),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建net.trainParam.epochs=10000;%训练次数设置, b8 S) y2 A# c
net.trainParam.goal=1e-6;%训练目标设置
+ R6 Q2 n: o3 f9 P9 HPL.lr=0.01;net.trainfcn='traingdm';
; `8 \$ N7 l* H5 H& P8 l, ^[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);" M P4 l9 e* ^; E+ w- o# ~
[normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输入的9组p数据,BP得到的结果t
0 {0 G9 N2 Q# Y! t- G7 @( I3 |[normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T);%用作变量3的数据p,BP得到的结果t
; |2 I5 l: W$ k2 N* z# [[normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%用作测试的3组数据p,BP得到的结果t
; b1 k0 [5 j; b$ n: AtrainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输入的9组p数据,BP得到的归一化后的结果t
6 K- u. A; Q% E3 l/ v' t5 ntrainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输入的9组数据t
3 r: Z3 F6 }5 ^4 J$ f% O2 m/ R: yvalidateOutput = mapminmax('reverse',normValidateOutput,ts);%用作变量3的数据p,BP得到的归一化的结果t5 z4 P" q, }2 C C5 w5 X
validateInsect = mapminmax('reverse',validateSamples.T,ts);%用作变量3的数据t
6 [: f; K6 U( B$ l$ ttestOutput = mapminmax('reverse',normTestOutput,ts);%用作变量3组数据p,BP得到的归一化的结果t
{' p0 i( \, B0 y$ S# Q' I7 utestInsect = mapminmax('reverse',testSamples.T,ts);%用作变量3组数据t
% M: r! s! Q# q%绝对误差计算6 S4 `! f; v7 W: A0 z
absTrainError = trainOutput-trainInsect;
2 s4 P' E+ D2 j( B( TabsTestError = testOutput-testInsect;8 ?7 Z; Q+ E5 [
error_sum=sqrt(absTestError(1).^2+absTestError(2).^2+absTestError(3).^2);
6 @( C* f- V& X3 d7 ~4 a- VAll_error=[All_error error_sum];
/ I! K5 g9 _7 M C! d( N [- Deps=90;%其为3组测试数据的标准差,或者每个数据偏差在一定范围内而判别6 y* f8 p& g" |; p ^
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))
: \" }( |) `; v0 Hsave mynetdata net
l) N J) }' m break% C! Y' h1 _+ O& C3 A
end' u5 L+ w1 V6 k0 @5 v
j
8 D9 l& F: I* p3 qend, c9 l$ s3 c3 n5 Y
问题是:- n m( f5 l6 }; F$ B$ b
if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<=30)|(error_sum<=eps))2 `6 R" b* P4 q3 B) U1 I
中的30是怎么算出来的啊 |
zan
|