数学建模社区-数学中国

标题: BP神经网络预测遇到一个疑问,麻烦过来看看 [打印本页]

作者: 数学不烦    时间: 2013-9-8 17:22
标题: BP神经网络预测遇到一个疑问,麻烦过来看看
本帖最后由 数学不烦 于 2013-9-9 21:56 编辑
4 A; ]: c5 Z* c
2 r: g$ y0 n( ~9 E' F; n/ a各位朋友,有一个问题请教你们。   我用BP神经网络做预测的时候(下面是我的代码)遇到一个问题。  首先我尝试在代码里面不把数据归一化,这样的出来的结果很差(R=0.46).但我把数据作归一化 与 反归一化 之后 确实R提高了很多(R=0.99),这时问题就来了,请看最下面的测试结果代码,那里只有输入(没有输出,因为是预测),premnmx 归一化要有输出的变量T,但我只有输入数据,没有输出数据,因此反归一的结果(最后的预测结果)也无法做到。那么我的预测就不是做不了吗?  很纠结,查了很多资料了,还是不知道怎么解决。4 x) z. J' j. Z6 X9 n
国赛准备到了,希望热心的朋友懂的不吝赐教,我把问题写得很认真,希望各位能帮我解决这个问题,谢谢了。2 U3 s. t0 A* `- T3 C
# |/ M+ T2 z- w/ T" d& D
clear
% l$ y  L1 y& E& ~( e) L7 Mclc$ I1 [0 m/ a( s# `) g; ~% ]! H
%输入数据--以一列作为一个输入数据0 H. c( ^/ P3 E1 \: e4 w
x1=[227.5 286.9 236.3 300.6 243.0];" W6 G6 Q$ Q9 R- c+ B! ?% `
x2=[286.9 236.3 300.6 243.0 354.1];+ S4 x+ B! W" T+ E9 Y& d! t9 H
x3=[236.3 300.6 243.0 354.1 294.1];
/ e; t3 l' Q$ J& m" Mx4=[300.6 243.0 354.1 294.1 361.4];4 ^! b7 i6 X& T# o  S/ ?% Y( O
x5=[243.0 354.1 294.1 361.4 333.7];
& }& L4 g5 Z1 K# |  h. x; Z' `; E/ Tx6=[354.1 294.1 361.4 333.7 426.4];* P2 v7 c: r/ e( O
x7=[294.1 361.4 333.7 426.4 434.4];
- H- b0 f% n0 W! \x8=[361.4 333.7 426.4 434.4 449.9];
' p: P( P7 |: @; Q8 L" f$ @x9=[333.7 426.4 434.4 449.9 431.9];
! ~# C+ J; _+ o2 x. ^
9 g' Z: c4 q$ d1 D7 z0 T8 _" [: o& T4 LP=[x1;x2;x3;x4;x5;x6;x7;x8;x9]';
/ i$ P$ b7 t  z8 b2 f1 ]%输出数据--以一列作为一个输出数据, ^& r* |, W' |8 d# A
y1=[354.1 294.1 361.4 333.7 426.4];
9 g+ C, @8 [7 Py2=[294.1 361.4 333.7 426.4 434.4];
4 C9 Y' X1 x5 ]3 i9 N3 f, @6 qy3=[361.4 333.7 426.4 434.4 449.9];
5 B3 V) Q% X6 h% f- i/ w6 `y4=[333.7 426.4 434.4 449.9 431.9];
( C2 ?4 q) Q' H: Ty5=[426.4 434.4 449.9 431.9 454.0];9 I. G; t- W1 T, C0 O" b  W
y6=[434.4 449.9 431.9 454.0 655.6];$ f# t, O+ o9 m% A
y7=[449.9 431.9 454.0 655.6 907.0];
* o& b4 J* B: U5 e' A+ h; Uy8=[431.9 454.0 655.6 907.0 1112.5];
: j* w, n' B9 E3 n& c- z; D( M. `y9=[454.0 655.6 907.0 1112.5 1401.1];# C- L- q0 U, R4 O+ j
1 _# _6 O8 L' ?% f0 n& Q: d
T=[y1;y2;y3;y4;y5;y6;y7;y8;y9]';
9 l3 j. p. M5 |- S" @$ s3 P/ X2 t
1 B7 C3 ]9 i8 N1 y8 u) B%归一化6 |! S" ^, c; O1 F4 g
% [P,minp,maxp,T,mint,maxt] = premnmx(P,T);
, T9 u! o9 H, \' i7 }8 a$ Q( H7 S6 v9 D%建立网络9 n; m$ k3 e$ G" Y
%其中[10,3]代表有一个隐含层,里面有10个神经元;“3”代表有三个输出数据% U8 m1 b& y/ x$ d
%{'tansig','purelin'}与[10,3]对应,意思为隐含层 与 输出层, P6 Z5 O  d. A  J& b5 M
%'traingdm' 表示调整权重,缩小误差的数学函数
" N  y! W" a* F%↓创建一个新的前向神经网络  
# I& d2 C* a8 Y4 {  m) U* nnet = newff(minmax(P),[6,5],{'tansig','purelin'},'traingdm')
+ C7 z$ r2 f5 P* G& w
% R  c" O, k. X% F/ K%  当前输入层权值和阈值
6 B5 O& a* u6 l' s* Y' |5 m7 K  h7 ]inputWeights = net.IW(1,1)
/ i3 p2 b) k$ h9 `( P* ^; p) Linputbias = net.b(1)9 h) q3 y* ^  B
/ b. H  }3 k9 s2 u' Z/ S. P
%  当前网络层权值和阈值 ' c( P  W, M" j2 r& l
layerWeights = net.LW(2,1)6 J$ C& w9 @, k, S$ I
layerbias = net.b(2)4 t: l! G. m; ~6 i9 p5 l

0 a! I6 S+ F0 Z7 i%  设置训练参数$ j/ [* U; {: X; Z, k& N
net.trainParam.show = 50;
' G/ M7 v* y5 j, C9 @) p9 Wnet.trainParam.lr = 0.05;
6 s# z* [6 o' N0 K3 Cnet.trainParam.mc = 0.9;7 N, c7 x; r, y, J+ p
net.trainParam.epochs = 10000;  %每计算10000次出一次结果
4 N: R3 G' v% ~$ D: k: l  j5 znet.trainParam.goal = 1e-6;     %期望达到的误差(认为是合适的误差)
) g0 Q! p) j# a7 `7 B7 D$ v' [+ P% d3 l, ~! v
%  调用 TRAINGDM 算法训练 BP 网络
9 Y9 Q& y) E- ]4 d: E( n9 K[net,tr] = train(net,P,T);      
5 V2 n" I8 d% G
; ?; }* |! Y' d%  对 BP 网络进行仿真
4 p( p% R9 N1 [A = sim(net,P);                 %A为输出结果
8 F( D6 Z: U  Q( h, Z* N! o7 L: h! W9 Q  J) [8 a* m5 J( o) t
%反归一化" ]. U) X' Z$ o- r$ ^
%  A = postmnmx(A,mint,maxt);
# j4 U' I1 K' v% J) R" k7 ]/ q5 k# @# m+ O
%  计算仿真误差  / P6 D$ {2 @* W: I8 s$ A6 G, g
E = T-A;                        %原来的输出 - 训练输出 = 误差; U3 z  V- Z, x: X9 s
MSE = mse(E)                    %输出误差9 T, N+ f' i+ S6 m- a" g& N
; V! H* Y' m4 Y, h' Y3 _- Y' H, Z; _  z) r
%下面是输入数据,测试结果5 g: e9 h4 C- D& }5 t# D- W4 o
x=[454.0 655.6 907.0 1112.5 1401.1]';. ?5 R5 a5 L/ e( D$ G6 e& L2 q
Y = sim(net,x)8 \# F5 t, m4 ^+ a# n) c

作者: magic2728    时间: 2013-9-9 13:06
要进行预测,必须有对应的新的输入量,你的在哪里?
作者: kaito1412    时间: 2013-9-9 18:51
用mapminmax可以对P,T分别归一化
作者: 狼之魂汪洋    时间: 2014-8-11 09:51
不知道你最后是怎么解决的,感觉你最后预测的时候没有把输入数据进行归一化,即要对x进行归一化,再对y进行反归一化,这是我的看法,不知道对不对




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5