数学建模社区-数学中国
标题:
数模小白关于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% n
clc,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% N
for 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 S
end
$ 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 d
net=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& i
LP.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& ?+ _- j
T0=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" e
figure(1)
! a" g$ E2 d' |6 s& ^; e1 a. Y0 R
plot(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& t
grid on
1 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, a
1 ^, 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