数学建模社区-数学中国
标题:
BP神经网络预测遇到一个疑问,麻烦过来看看
[打印本页]
作者:
数学不烦
时间:
2013-9-8 17:22
标题:
BP神经网络预测遇到一个疑问,麻烦过来看看
本帖最后由 数学不烦 于 2013-9-9 21:56 编辑
3 e! m( Q! d. i; f6 b! l2 F* r/ i s
0 w- s+ \2 _; f2 B+ R, W
各位朋友,有一个问题请教你们。 我用BP神经网络做预测的时候(下面是我的代码)遇到一个问题。 首先我尝试在代码里面不把数据归一化,这样的出来的结果很差(R=0.46).但我把数据作归一化 与 反归一化 之后 确实R提高了很多(R=0.99),这时问题就来了,请看最下面的测试结果代码,那里只有输入(没有输出,因为是预测),premnmx 归一化要有输出的变量T,但我只有输入数据,没有输出数据,因此反归一的结果(最后的预测结果)也无法做到。那么我的预测就不是做不了吗? 很纠结,查了很多资料了,还是不知道怎么解决。
( B9 P8 M. u. k ?
国赛准备到了,希望热心的朋友懂的不吝赐教,我把问题写得很认真,希望各位能帮我解决这个问题,谢谢了。
5 ]7 @. F, Q9 F+ J
+ z* _# ^4 [* m! I' p! t# l' w
clear
6 p3 u2 a+ J) Z
clc
+ ?* E0 @2 G W' _
%输入数据--以一列作为一个输入数据
0 `5 q! w% H% F3 b
x1=[227.5 286.9 236.3 300.6 243.0];
5 ]3 {' E. q. u
x2=[286.9 236.3 300.6 243.0 354.1];
3 @) x$ j4 P3 v B
x3=[236.3 300.6 243.0 354.1 294.1];
* O6 L3 j, B, n ~4 l
x4=[300.6 243.0 354.1 294.1 361.4];
, J; {- v4 r/ T$ Y- X- n
x5=[243.0 354.1 294.1 361.4 333.7];
" U" Y, q* h- a& F& Q; d
x6=[354.1 294.1 361.4 333.7 426.4];
- B7 m, }; B; F! d5 P2 d9 S
x7=[294.1 361.4 333.7 426.4 434.4];
+ N2 r, U! H6 }9 b6 `1 \0 ^1 p2 v; J
x8=[361.4 333.7 426.4 434.4 449.9];
& i, S( y! Y5 P% {- }7 _
x9=[333.7 426.4 434.4 449.9 431.9];
5 t. J; H1 p6 e
% k2 \$ ]4 `2 }, K
P=[x1;x2;x3;x4;x5;x6;x7;x8;x9]';
5 ]1 k/ e) j9 @* j( W
%输出数据--以一列作为一个输出数据
& `" V2 Q! ^/ Q
y1=[354.1 294.1 361.4 333.7 426.4];
! Q5 v% i- u' N) {7 B
y2=[294.1 361.4 333.7 426.4 434.4];
0 s z0 o! q8 l8 r1 {# _$ @
y3=[361.4 333.7 426.4 434.4 449.9];
" h% m3 K# r* N' @$ n3 w. I
y4=[333.7 426.4 434.4 449.9 431.9];
. g( H5 x2 {2 e6 _2 L7 n* N1 ]5 ~
y5=[426.4 434.4 449.9 431.9 454.0];
4 T3 A3 i! x/ b) y8 J: y" f, J
y6=[434.4 449.9 431.9 454.0 655.6];
0 I7 D9 h/ L8 Z' z
y7=[449.9 431.9 454.0 655.6 907.0];
- R8 V4 L: j3 \5 k
y8=[431.9 454.0 655.6 907.0 1112.5];
( t, W: ]: c6 x# g" p( a
y9=[454.0 655.6 907.0 1112.5 1401.1];
- c1 i. m, h: p2 f5 _
# }, t5 ] _' X9 g! H( U
T=[y1;y2;y3;y4;y5;y6;y7;y8;y9]';
0 E* n$ i; n7 [: {0 N, E. x( T
. d4 K, j# V5 m+ o% @, b. ?
%归一化
5 o6 b( n/ _% f* _$ p/ T0 x
% [P,minp,maxp,T,mint,maxt] = premnmx(P,T);
0 j& D0 N* a$ E. D; X. N
%建立网络
0 E+ V8 W3 | A
%其中[10,3]代表有一个隐含层,里面有10个神经元;“3”代表有三个输出数据
/ U& D# J3 H8 w& `
%{'tansig','purelin'}与[10,3]对应,意思为隐含层 与 输出层
9 `7 w: G% Z. Y& P5 _1 y* t! s) V9 k
%'traingdm' 表示调整权重,缩小误差的数学函数
; V" P1 {( w# s' M/ t2 X9 h
%↓创建一个新的前向神经网络
, z/ B5 ?5 c! r
net = newff(minmax(P),[6,5],{'tansig','purelin'},'traingdm')
. Z" w9 k( s$ |* M2 r: d
; f' |* z4 o5 {1 `' }
% 当前输入层权值和阈值
& A( C! V# g9 N+ |% x& M6 u" P
inputWeights = net.IW(1,1)
0 I$ O" T: _9 z1 L% T
inputbias = net.b(1)
2 T' Q: ^8 V2 y; z. X- [
' \ [8 f" ?# r: j/ P3 ~" O
% 当前网络层权值和阈值
( v" i. X' U$ H; t/ c
layerWeights = net.LW(2,1)
4 q8 C, i8 q/ E. {" p
layerbias = net.b(2)
. ]0 `* b' Y- P s5 g- l
+ b2 h' R% w, b' E6 R% t
% 设置训练参数
; z |. c: Y9 C+ h' ?; Y
net.trainParam.show = 50;
& x1 u! y' o* f2 H( j+ ~' m
net.trainParam.lr = 0.05;
. Z$ b) z0 h) X7 X. x! L6 ]5 y
net.trainParam.mc = 0.9;
: Z; |6 \8 s! j; \. F
net.trainParam.epochs = 10000; %每计算10000次出一次结果
- L& a& ^, y) H6 l- i
net.trainParam.goal = 1e-6; %期望达到的误差(认为是合适的误差)
2 M2 v" e/ q6 Y R" i
* o Z5 P9 L8 a! x7 G" j
% 调用 TRAINGDM 算法训练 BP 网络
; ?5 c$ e t/ X" x
[net,tr] = train(net,P,T);
m, ^9 ^) D7 c) G% C$ h
' L) a, e# N4 r, W6 K! T
% 对 BP 网络进行仿真
; \, ~- h5 v6 M" ~ ]. i
A = sim(net,P); %A为输出结果
# E; N, V0 A% y1 c
5 z/ e0 r& `$ ]( H: j" K! Q2 _1 t* _4 Z
%反归一化
7 @/ z! a* W9 M( R
% A = postmnmx(A,mint,maxt);
& j( y p0 s+ |0 N' F& C
5 l+ y% x) C5 L8 [/ _& K* c( j
% 计算仿真误差
4 o, [2 n# ^- b8 P/ l
E = T-A; %原来的输出 - 训练输出 = 误差
* ^. M c; I! E1 K+ _
MSE = mse(E) %输出误差
/ A$ p9 n, Q& o4 w
/ W9 I# O+ y: }9 G
%下面是输入数据,测试结果
# I2 ]4 @$ s3 C% K
x=[454.0 655.6 907.0 1112.5 1401.1]';
7 z+ [& a7 H, H0 L
Y = sim(net,x)
1 [/ y: y8 \( y: B" T
作者:
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