数学建模社区-数学中国

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

作者: 数学不烦    时间: 2013-9-8 17:22
标题: BP神经网络预测遇到一个疑问,麻烦过来看看
本帖最后由 数学不烦 于 2013-9-9 21:56 编辑
% |! M4 i, \. Q$ _  W; C% [8 {, X' U
各位朋友,有一个问题请教你们。   我用BP神经网络做预测的时候(下面是我的代码)遇到一个问题。  首先我尝试在代码里面不把数据归一化,这样的出来的结果很差(R=0.46).但我把数据作归一化 与 反归一化 之后 确实R提高了很多(R=0.99),这时问题就来了,请看最下面的测试结果代码,那里只有输入(没有输出,因为是预测),premnmx 归一化要有输出的变量T,但我只有输入数据,没有输出数据,因此反归一的结果(最后的预测结果)也无法做到。那么我的预测就不是做不了吗?  很纠结,查了很多资料了,还是不知道怎么解决。
2 _  P! Z& e+ K! R0 f: V国赛准备到了,希望热心的朋友懂的不吝赐教,我把问题写得很认真,希望各位能帮我解决这个问题,谢谢了。. p" J2 y9 i! M$ D: y
' b/ b- Z4 J# n9 ?
clear
8 n. \1 b; Z- z" p& b1 |, ?: kclc
' V  Y/ _0 p# }- m* l%输入数据--以一列作为一个输入数据0 Z" f" \7 m5 k7 n4 Y0 L
x1=[227.5 286.9 236.3 300.6 243.0];
. p9 ?3 S4 j, J! {' Jx2=[286.9 236.3 300.6 243.0 354.1];. n5 g6 R% M) v  _: Q* l3 w3 g
x3=[236.3 300.6 243.0 354.1 294.1];
/ ^* u7 n) H7 O* x2 Qx4=[300.6 243.0 354.1 294.1 361.4];
6 W4 E; h0 M- P6 M7 y" I$ e( Wx5=[243.0 354.1 294.1 361.4 333.7];5 M8 T. X" @8 F, I3 A3 c1 j; T6 u% Q
x6=[354.1 294.1 361.4 333.7 426.4];
9 e7 p9 c; u1 J0 @- v7 v3 r9 Y; ix7=[294.1 361.4 333.7 426.4 434.4];
8 H* U' v( C9 s  H2 H- vx8=[361.4 333.7 426.4 434.4 449.9];
9 x+ D1 Y  P% cx9=[333.7 426.4 434.4 449.9 431.9];
+ u6 j! y$ ?) H/ ~8 _9 l
2 Q- Y+ s# ]! P8 [: HP=[x1;x2;x3;x4;x5;x6;x7;x8;x9]';8 \- ?, C' {7 s) r4 H4 K- Y
%输出数据--以一列作为一个输出数据
" I3 R5 g" ^9 U+ K: dy1=[354.1 294.1 361.4 333.7 426.4];( {; @3 N" h( r% I. W
y2=[294.1 361.4 333.7 426.4 434.4];
/ ]2 U( y: r0 |4 ]) Ay3=[361.4 333.7 426.4 434.4 449.9];
, `, h6 N9 p/ S5 z  @y4=[333.7 426.4 434.4 449.9 431.9];
# H' J  ]+ g+ d/ f4 ~# g6 ey5=[426.4 434.4 449.9 431.9 454.0];# K8 W- P# R1 z- o4 h0 k' z
y6=[434.4 449.9 431.9 454.0 655.6];5 Q7 F5 b' q( g- F4 g* I9 v
y7=[449.9 431.9 454.0 655.6 907.0];
7 J$ h# p0 E1 r4 wy8=[431.9 454.0 655.6 907.0 1112.5];7 V1 y/ t. f9 w6 [
y9=[454.0 655.6 907.0 1112.5 1401.1];
$ P3 A( s* {: L6 i# l9 v1 g
. f3 j. r! b2 t, O/ e9 r8 P( g+ rT=[y1;y2;y3;y4;y5;y6;y7;y8;y9]';
, _. [. }- I5 U. w2 D; `6 S2 [# n/ g7 H6 b, e$ w1 y+ G7 A
%归一化; ]4 ], [/ U# f: {) v- K
% [P,minp,maxp,T,mint,maxt] = premnmx(P,T);
# J1 b: o7 t! z; D+ B%建立网络: c+ e  C+ y' l* P' S0 i
%其中[10,3]代表有一个隐含层,里面有10个神经元;“3”代表有三个输出数据  N1 F/ y5 {7 r: m1 m
%{'tansig','purelin'}与[10,3]对应,意思为隐含层 与 输出层% R; ?: i! l! k9 Y: n2 d% u
%'traingdm' 表示调整权重,缩小误差的数学函数* {8 c4 k' ]1 X9 v: v
%↓创建一个新的前向神经网络  ) i) a, f  q3 v5 D) f3 G' X
net = newff(minmax(P),[6,5],{'tansig','purelin'},'traingdm')
& X6 i; g* i; S# _* B$ }& r) R* }2 L
%  当前输入层权值和阈值 * W/ Y9 {+ l% N$ L
inputWeights = net.IW(1,1)
7 P5 s3 T7 w+ N7 o% m% b" C; oinputbias = net.b(1)% k' {7 |5 j4 b" C0 y
. I& d2 v; E) }9 B& G' @( E; s
%  当前网络层权值和阈值
2 b, N4 e' w2 xlayerWeights = net.LW(2,1)
6 ]: ~6 x2 e  n& K  Q' Nlayerbias = net.b(2)# u6 `7 w. W" \- A
  D7 \2 o9 w7 J. m% n7 [
%  设置训练参数
( s3 T7 Z9 r  h6 t) _3 f. w( Vnet.trainParam.show = 50;4 F+ Q! V4 J6 p# F
net.trainParam.lr = 0.05;
" c$ J! S% B% Jnet.trainParam.mc = 0.9;8 u% x$ R5 ]+ ]3 q  c( f
net.trainParam.epochs = 10000;  %每计算10000次出一次结果
: g$ c+ d7 k1 W/ Z* vnet.trainParam.goal = 1e-6;     %期望达到的误差(认为是合适的误差)) P- m3 b4 I  b; B, D& a' j

! x+ k, n% |, e  r' C, W/ t! ~%  调用 TRAINGDM 算法训练 BP 网络
" X1 u; @) |- A0 p! L# N& H( P[net,tr] = train(net,P,T);      
& }# F0 w. r  N% H/ F4 M7 k
3 Y- b( e9 g; i% N' E%  对 BP 网络进行仿真
- _& J7 |$ p! c7 O( CA = sim(net,P);                 %A为输出结果
- Z, f% J/ W% E% X' f' B  M
4 G" i6 `" ^! z" i%反归一化
1 u! {# D/ R; v4 l%  A = postmnmx(A,mint,maxt);, H. I  C2 h8 x$ m# p: O$ |+ t
2 j2 q; _9 n$ P
%  计算仿真误差  
  w( c7 F/ L/ T6 H7 L8 L- CE = T-A;                        %原来的输出 - 训练输出 = 误差
' `' [+ o5 X! {% f+ s7 mMSE = mse(E)                    %输出误差- v$ o5 `( i  R, M; I
) d+ M" b/ v1 K+ M
%下面是输入数据,测试结果5 v3 Y0 h- C( N; Z9 S# G2 ~
x=[454.0 655.6 907.0 1112.5 1401.1]';' r5 O5 ?8 v6 [# d* H; n& r
Y = sim(net,x); n- x" G& f5 v4 @

作者: 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