数学建模社区-数学中国
标题:
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 |, ?: k
clc
' 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! {' J
x2=[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 Q
x4=[300.6 243.0 354.1 294.1 361.4];
6 W4 E; h0 M- P6 M7 y" I$ e( W
x5=[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; i
x7=[294.1 361.4 333.7 426.4 434.4];
8 H* U' v( C9 s H2 H- v
x8=[361.4 333.7 426.4 434.4 449.9];
9 x+ D1 Y P% c
x9=[333.7 426.4 434.4 449.9 431.9];
+ u6 j! y$ ?) H/ ~8 _9 l
2 Q- Y+ s# ]! P8 [: H
P=[x1;x2;x3;x4;x5;x6;x7;x8;x9]';
8 \- ?, C' {7 s) r4 H4 K- Y
%输出数据--以一列作为一个输出数据
" I3 R5 g" ^9 U+ K: d
y1=[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 ]) A
y3=[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 e
y5=[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 w
y8=[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+ r
T=[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; o
inputbias = net.b(1)
% k' {7 |5 j4 b" C0 y
. I& d2 v; E) }9 B& G' @( E; s
% 当前网络层权值和阈值
2 b, N4 e' w2 x
layerWeights = net.LW(2,1)
6 ]: ~6 x2 e n& K Q' N
layerbias = net.b(2)
# u6 `7 w. W" \- A
D7 \2 o9 w7 J. m% n7 [
% 设置训练参数
( s3 T7 Z9 r h6 t) _3 f. w( V
net.trainParam.show = 50;
4 F+ Q! V4 J6 p# F
net.trainParam.lr = 0.05;
" c$ J! S% B% J
net.trainParam.mc = 0.9;
8 u% x$ R5 ]+ ]3 q c( f
net.trainParam.epochs = 10000; %每计算10000次出一次结果
: g$ c+ d7 k1 W/ Z* v
net.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( C
A = 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- C
E = T-A; %原来的输出 - 训练输出 = 误差
' `' [+ o5 X! {% f+ s7 m
MSE = 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