数学建模社区-数学中国

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

作者: ChildofAtlantis    时间: 2015-4-19 15:43
标题: 数模小白关于BP的一些问题
%PA 6月6:0:0   计算的MATLAB 程序如下:BP神经网络预测
7 Q" c+ L, e& F4 |& s%6月6位于第28行
3 k' }% }7 A. x! nclc,clear
; h. ~# [- G) K, r2 f6 f/ u4 mload ('data.mat')%原始数据以列向量的方式存放在workplace文件中
( \, Q$ w: b8 zPA=PA(2:29,:);
+ d" }& \+ {) D0 B$ N%数据的标准化$ C( ^3 z+ Z2 p* P  {1 L1 X
N=size(PA);. h9 O# K) D5 H! _
for j=1:N(1,2)
- o6 L! F1 N9 r1 U. k( D    PAHminmax=minmax(PA(:,j)');' v# r& D  o  S/ [2 B2 K
    for i=1:N(1,1)" f- W7 l' x3 T) C
        PA(i,j)=(PA(i,j)-PAHminmax(1,1))/(PAHminmax(1,2)-PAHminmax(1,1));8 I$ `: C1 M- n
    end
: J: c+ D! G6 F- rend
4 J2 u" q  J* d6 G  ^0 e6 H%以每天的从0时计数起,每隔十五分钟作为输入- X( @  n. C7 k$ \. S
P=PA(7:27,:);$ [  M5 E1 V5 p: _9 d* F4 K) S
%以6月6的间隔十五分钟的发电量作为目标向量' C! X9 c4 E2 A# g" \, _4 `
T=PA(28,:);% M  d! e. |  k# R
%创建一个BP神经网络,每一个输入向量的取值范围为[0 ,1],隐含层有22个神经元,) s- A9 j, ]/ Y' ]
%输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为%logsig,
1 V5 C6 ^" Z) [( i& ]4 _%训练函数为梯度下降函数,即标准学习算法' C- p: `+ r$ ^. I. J
for i=1:21
4 d& j" V, B9 s    a(i,1)=0;2 C2 F- S) _* {# w! E3 o
    a(i,2)=1;
. g  ^. W3 J. ^) \- Uend
# e) @9 r$ i% i2 v( Y1 Snet=newff(a,[21,1],{'tansig','logsig'},'traingd');
, Q, a) S3 l1 Y$ V0 P. F% T( }! k2 M* p8 Nnet.trainParam.epochs=30000;
* i8 m" A* t1 q$ r" e" R4 `% unet.trainParam.goal=0.01;
  E$ g. D! j. ~. W& `%设置学习速率为0.1
0 I& M: E+ }. l3 ]5 \/ QLP.lr=0.1;2 Z; P* h7 Q8 I7 U  q
%训练网络
& i2 t8 Y" l0 ]- F0 f* A. ]net=train(net,P,T);
# t5 M: i: J0 M% C% v3 p%预测6月6的发电量数据3 q) p  T- u  @2 r3 K! G4 f$ r
T1=sim(net,P);%预测值" W! V* N+ H" S& K- M( H
%PA.6月6日发电量真实值; n  ]+ q# S, F: R/ b  }6 A+ b
T0=PA(28,:);
0 Z: J# D- \) Y; |# E%预测值与实际值的误差, O4 x6 }& p& v' e8 d& m2 P: _
for i=1:N(1,2)
6 A1 `* u3 f$ R4 l( O% f& G: r    error(1,i)=T1(1,i)-T0(1,i);
" _+ G$ q  Z$ D! ~( ~) v/ d' {end" D& |) x6 b. U9 [( g7 x" v+ {! h
%绘制误差图3 [8 ]$ }" s+ Y/ s
figure(1)0 g5 m$ T4 D5 p& Y0 T) b3 W6 P
plot(1:N(1,2),error(1,1:N(1,2)),'-*')4 F" Z6 X5 S, I. v/ H
grid on
; u. n" L6 @7 i- S$ s6 _xlabel('时点x'),ylabel('发电功率误差y');
' T# ^/ S. v* E. ]( h# Wtitle('PA6.6.0.0-6.6.23.45发电功率误差图像'). ~: X- p! X0 W* k. p% ]- W5 v
%绘制实时函数图
* A' f9 _/ l. L: q7 a9 R. O0 efigure(2)
) K, Q" x0 G; a7 E' \9 j7 xplot(1:N(1,2),T0(1,:),1:N(1,2),T1(1,:),'r')
! w+ @+ }7 G( q# h) }& M& hgrid on) g7 i# d# B) C% I
legend('实际值','预测值',2)- K5 x" b+ k' R( r$ y
xlabel('时点x'),ylabel('发电功率y');8 s; C6 Q4 m  r
title('PA6.6.0.0-6.6.23.45发电功率实时函数图像')* I7 M0 G/ q' i  i( Q% S/ L
web('http://www.ilovematlab.cn/forum-238-1.html','-browser')
7 L$ n; W/ `- k% F1 L; D5 ^/ r* w9 ?) ]; L" ^

6 Q, w8 H/ d" O; d5 }+ c. o8 q- \' R" S; e. P% R6 m8 E* {' {  E$ v
( `- ?: |% C) X
一本书关于预测发电量的BP的程序。我稍微有点纳闷,既然你已经知道了6月6日的实际值,并且都拿相应的数据来作目标向量了,还利用神经网络来预测6月6日的发电量,意义何在?) u% O% c! z9 o- O, M

" H8 G7 e0 _8 {3 _# ^# \0 I
作者: fg8741142    时间: 2015-4-22 14:49
你要明白神经网络是干嘛用的,你这个代码做出来的网络,可能是预测那些不知道实际发电量的,6月6日的数据是用来训练网络的,同时对比误差查看网络的性能4 @0 q5 L; p6 u2 a! q

作者: 蘑菇先生    时间: 2015-7-16 15:14
误差也有分为训练误差和测试误差的,具体你可以参考统计学习方法相关资料。& D" _& b) G) S5 b0 X6 u

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

  O' u: j" i$ ?) U1 o0 ?1 T% ~
作者: 杨地雷    时间: 2015-8-21 09:01
为了验证神经网络的准确度吧
& a$ b$ \" G/ e  L: k( @" q. Z- s




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