数学建模社区-数学中国
标题:
数模小白关于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- o
clc,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 n
end
: Z9 M' Q4 S- U1 q) K1 q; h+ X$ C
net=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; B
LP.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* ?* M
end
: 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 l
grid on
1 x; y$ K3 j/ I" F6 s5 W, q
xlabel('时点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* A
figure(2)
7 S! K7 U. \9 Z: O
plot(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; E
title('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