数学建模社区-数学中国

标题: 数模小白关于BP的一些问题 [打印本页]

作者: ChildofAtlantis    时间: 2015-4-19 15:43
标题: 数模小白关于BP的一些问题
%PA 6月6:0:0   计算的MATLAB 程序如下:BP神经网络预测  w1 M8 {0 p4 L9 b1 x
%6月6位于第28行
/ X) i  u9 J, e3 A% nclc,clear! B+ P9 D8 N5 a
load ('data.mat')%原始数据以列向量的方式存放在workplace文件中- W1 ]: P  \" r
PA=PA(2:29,:);& B. ~  Q. L7 l) \" A
%数据的标准化" v- b2 D9 B+ Z5 E4 j3 @1 N7 w/ h
N=size(PA);
1 j0 }3 @) `" k. ~4 C% Nfor j=1:N(1,2)" g; `( e; @1 u! j: Q; [, y7 R% d! J7 A
    PAHminmax=minmax(PA(:,j)');9 e0 c) R, j- X$ s) D& b5 T1 K
    for i=1:N(1,1)
  L; S8 ~3 r0 `: h1 O: U# F" ^        PA(i,j)=(PA(i,j)-PAHminmax(1,1))/(PAHminmax(1,2)-PAHminmax(1,1));$ @, G" [* j8 _9 D/ `5 d
    end
: L; P" q' t/ O% O2 Send$ u7 ^8 k* Z( Q8 Y  ~" @9 M* v9 O1 o
%以每天的从0时计数起,每隔十五分钟作为输入0 r+ v- q5 x) H" I7 D7 y& b2 |
P=PA(7:27,:);& j$ s# y- j) h) d* d
%以6月6的间隔十五分钟的发电量作为目标向量4 @5 g1 R0 I& u
T=PA(28,:);
0 @) r9 O" t% x' y# |2 k$ ^%创建一个BP神经网络,每一个输入向量的取值范围为[0 ,1],隐含层有22个神经元,( @+ g0 C' j7 p+ u1 R" \
%输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为%logsig,
$ L# ~1 L& t1 \& S" y%训练函数为梯度下降函数,即标准学习算法
  V# s8 a/ f2 W: O6 `for i=1:21
5 ?4 f0 S- \2 A* p( _    a(i,1)=0;
5 Z8 u- f5 l( i' g    a(i,2)=1;' o  m! q2 Z) {" o* N5 C, t
end
# Z4 y2 K5 k: h' A& T3 w0 dnet=newff(a,[21,1],{'tansig','logsig'},'traingd');- z' B- ~+ \7 l( p/ l4 i1 Q. K
net.trainParam.epochs=30000;: x% K+ w5 \6 U( q
net.trainParam.goal=0.01;8 ~7 |3 @9 C& M+ q0 R- Z/ h# L
%设置学习速率为0.1
5 u' Z) i0 i% e% |7 d& iLP.lr=0.1;
  o/ r- R+ q2 B%训练网络( s' T" `; G- H
net=train(net,P,T);' `8 n; q2 F5 L) d( \/ L
%预测6月6的发电量数据, B  z3 r" g) \6 l
T1=sim(net,P);%预测值
' V) ~" I; `$ W7 F) ]  G! b%PA.6月6日发电量真实值
" |: K& ?+ _- jT0=PA(28,:);7 `, Z( l, n9 ^
%预测值与实际值的误差+ i( ^- c5 r2 ^1 F# |; D
for i=1:N(1,2)
* k# y4 Q+ G# h5 y    error(1,i)=T1(1,i)-T0(1,i);* S/ G8 ?8 ^4 Z; m. n3 e
end
& j6 Q( v& T# d/ q, z%绘制误差图
$ A. J  N- d8 I: d" efigure(1)
! a" g$ E2 d' |6 s& ^; e1 a. Y0 Rplot(1:N(1,2),error(1,1:N(1,2)),'-*'): P& q- X& m% W$ O3 ]8 k( v
grid on/ F6 N& u+ |: X% c& z3 o  q
xlabel('时点x'),ylabel('发电功率误差y');, J& @+ a% ?! ~4 Y5 }
title('PA6.6.0.0-6.6.23.45发电功率误差图像')
9 Z6 Y, }% I- ~8 Z8 t  [%绘制实时函数图/ ^. ?9 b8 c) N0 |# O" s
figure(2)( p% g5 R( s6 A3 _
plot(1:N(1,2),T0(1,:),1:N(1,2),T1(1,:),'r')
) I& g  ~1 E) h% x& tgrid on1 R  H; v0 j& e
legend('实际值','预测值',2)
/ B+ o% @- Q/ a5 L3 `/ _xlabel('时点x'),ylabel('发电功率y');) L2 N$ o) _5 k( [# }+ o
title('PA6.6.0.0-6.6.23.45发电功率实时函数图像')
6 j. Q+ D, l, c web('http://www.ilovematlab.cn/forum-238-1.html','-browser')
! E& ], [! @  Q% d4 T, A. ^
6 i5 `  V( r; E, W" {0 {& S" f, a1 ^, M9 I# T$ W6 j) \# N' r5 r! U3 e4 |

7 H* {+ _9 L. E6 h' M
4 M; c8 }" B- E) `& I一本书关于预测发电量的BP的程序。我稍微有点纳闷,既然你已经知道了6月6日的实际值,并且都拿相应的数据来作目标向量了,还利用神经网络来预测6月6日的发电量,意义何在?
8 u, f" E9 `2 f) T9 x- ~
* @+ @$ H+ ]* d% J- |) @
作者: fg8741142    时间: 2015-4-22 14:49
你要明白神经网络是干嘛用的,你这个代码做出来的网络,可能是预测那些不知道实际发电量的,6月6日的数据是用来训练网络的,同时对比误差查看网络的性能! W3 R3 e5 f3 ?. V( x6 v5 q( t

作者: 蘑菇先生    时间: 2015-7-16 15:14
误差也有分为训练误差和测试误差的,具体你可以参考统计学习方法相关资料。5 |, E0 R! ^; \, x! K

作者: 木__易    时间: 2015-8-17 08:55

' V( F: e* w: M, k7 J
作者: 杨地雷    时间: 2015-8-21 09:01
为了验证神经网络的准确度吧
' ]+ e0 w. }& A' u( w




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