数学建模社区-数学中国

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

作者: ChildofAtlantis    时间: 2015-4-19 15:43
标题: 数模小白关于BP的一些问题
%PA 6月6:0:0   计算的MATLAB 程序如下:BP神经网络预测$ R- O: h! |9 W; `: D
%6月6位于第28行
/ ^" Y; {. {* ?+ P; e- oclc,clear
! F% [- m4 K2 X6 _) `0 t6 t7 }load ('data.mat')%原始数据以列向量的方式存放在workplace文件中( h& u# }/ ^2 v1 t
PA=PA(2:29,:);1 m6 g& A+ l! u* q
%数据的标准化, D' n. G: Z7 k. e& V. f
N=size(PA);6 _' W# u9 L* z6 w4 S
for j=1:N(1,2)
5 D. ?# P1 g  H9 k- W    PAHminmax=minmax(PA(:,j)');
6 B' j" Z+ c* e, j# u/ O& Q    for i=1:N(1,1)
. y7 c' Y7 Y8 T( D9 n/ W" }        PA(i,j)=(PA(i,j)-PAHminmax(1,1))/(PAHminmax(1,2)-PAHminmax(1,1));
* a+ u5 m# e4 u! J1 J. j, j    end: u8 e( A, z" i1 w# P
end
$ Y( u- @$ H* [( f%以每天的从0时计数起,每隔十五分钟作为输入4 R0 s/ j9 \$ Z* L2 j6 J
P=PA(7:27,:);
) A' V. \; k; f- w- n: H%以6月6的间隔十五分钟的发电量作为目标向量4 a( v, O( F9 p  n. @- ^( ^
T=PA(28,:);; ^8 m& [% s) }- h6 O3 v
%创建一个BP神经网络,每一个输入向量的取值范围为[0 ,1],隐含层有22个神经元,- m8 a+ S: v- S* x2 ?9 p
%输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为%logsig,. ?4 j2 h# k9 Y' C
%训练函数为梯度下降函数,即标准学习算法: E% f3 {0 V7 n$ X' S5 c' I
for i=1:21
* y$ U8 f9 u' o) ~0 x    a(i,1)=0;
' G) H9 Z8 {& n, `    a(i,2)=1;
' D5 m, m3 N! a8 b1 e" _0 nend
: Z9 M' Q4 S- U1 q) K1 q; h+ X$ Cnet=newff(a,[21,1],{'tansig','logsig'},'traingd');0 t9 C8 f% B0 f4 E) n
net.trainParam.epochs=30000;. Z: Q/ N# b6 W, n& V
net.trainParam.goal=0.01;
' O# e: \6 a$ o3 O6 f! g0 \* i%设置学习速率为0.1
9 |  g7 H: h$ n8 ], m/ A; BLP.lr=0.1;
) ?  M1 i4 @0 \%训练网络
$ x% P- A" u4 I4 C* J  [net=train(net,P,T);# Z8 e+ }4 H- o& e) h
%预测6月6的发电量数据6 D% ?* q+ Z1 C' J( q
T1=sim(net,P);%预测值
0 h! S9 O1 Z$ B* Q%PA.6月6日发电量真实值+ d7 B. m$ A) Q+ y! q) Q7 r
T0=PA(28,:);
; u8 Y% C2 @, r4 x9 t%预测值与实际值的误差
& `/ Z8 ]$ d" d& c. y5 w3 q$ @5 `for i=1:N(1,2)
3 G) F) u. z5 l    error(1,i)=T1(1,i)-T0(1,i);
# s; g/ @7 B2 K( N6 n4 C* ?* Mend: B& v) D( W' ~+ g/ w- e
%绘制误差图! o, u7 A. i# x& @& m7 g
figure(1)2 \/ y. ]  S8 p) l" g( B; v+ _
plot(1:N(1,2),error(1,1:N(1,2)),'-*')
4 u$ ]6 J; L0 lgrid on
1 x; y$ K3 j/ I" F6 s5 W, qxlabel('时点x'),ylabel('发电功率误差y');  r- ~7 r% J& f! l$ N+ b
title('PA6.6.0.0-6.6.23.45发电功率误差图像')
9 G$ c4 a( |% |+ s. W8 \/ }; P%绘制实时函数图
: a1 q! M) X2 @% o' q) N, K* Afigure(2)
7 S! K7 U. \9 Z: Oplot(1:N(1,2),T0(1,:),1:N(1,2),T1(1,:),'r')+ m* u& _5 B& G8 |+ T
grid on- e5 [9 f; a0 e, L0 B2 U, X$ ~# F7 @* P
legend('实际值','预测值',2)5 ?  \( r  {4 S  k6 w
xlabel('时点x'),ylabel('发电功率y');
$ y6 X4 u+ d' N; Etitle('PA6.6.0.0-6.6.23.45发电功率实时函数图像')
( n3 [, n* F+ g& l, [) ]0 d web('http://www.ilovematlab.cn/forum-238-1.html','-browser')
' n# Z1 U& ^7 s& {) H& S3 f" p, W" `% k8 \# C  x9 r, f; {
& r6 [, Z: b0 V
+ a1 W( ^$ l! O) z+ X. [, O

4 \2 i2 e3 |/ B4 U, u+ F2 l3 {一本书关于预测发电量的BP的程序。我稍微有点纳闷,既然你已经知道了6月6日的实际值,并且都拿相应的数据来作目标向量了,还利用神经网络来预测6月6日的发电量,意义何在?8 T# X; j; `% V! [9 S2 x  V
# ?7 o+ Z$ Q/ D, Z

作者: fg8741142    时间: 2015-4-22 14:49
你要明白神经网络是干嘛用的,你这个代码做出来的网络,可能是预测那些不知道实际发电量的,6月6日的数据是用来训练网络的,同时对比误差查看网络的性能" K/ L% @, t9 G5 d7 A

作者: 蘑菇先生    时间: 2015-7-16 15:14
误差也有分为训练误差和测试误差的,具体你可以参考统计学习方法相关资料。$ O5 @0 g. n4 D

作者: 木__易    时间: 2015-8-17 08:55
. T2 A! q+ X0 v1 M4 x# h8 W  Q

作者: 杨地雷    时间: 2015-8-21 09:01
为了验证神经网络的准确度吧
8 d- Q( S' `" `, S+ x  o




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