数学建模社区-数学中国
标题:
数模小白关于BP的一些问题
[打印本页]
作者:
ChildofAtlantis
时间:
2015-4-19 15:43
标题:
数模小白关于BP的一些问题
%PA 6月6:0:0 计算的MATLAB 程序如下:BP神经网络预测
* A8 V( {) S8 V7 q/ `
%6月6位于第28行
# i5 N$ C. v6 P7 M
clc,clear
/ q- S, F3 @, _3 ^5 H$ M! b
load ('data.mat')%原始数据以列向量的方式存放在workplace文件中
C: j3 m3 Y! q! x4 {
PA=PA(2:29,:);
; @3 m& C( ~/ F: o; V7 \
%数据的标准化
6 j7 D( y0 n, I7 b; Q' V' V
N=size(PA);
$ i. s% ~ `& |2 [
for j=1:N(1,2)
9 w) N; F; j( P1 N) v- [, F
PAHminmax=minmax(PA(:,j)');
" L a) M( A( i0 [ @8 A
for i=1:N(1,1)
0 {4 Y `$ A' j/ A; n. q) Q
PA(i,j)=(PA(i,j)-PAHminmax(1,1))/(PAHminmax(1,2)-PAHminmax(1,1));
( I% T) G3 g6 X3 a; r
end
A( c% b m( U, ^/ t3 Q3 J
end
* n0 V. N9 J1 M1 c
%以每天的从0时计数起,每隔十五分钟作为输入
" q/ H+ W3 J" b2 v% i0 s
P=PA(7:27,:);
. ? g8 X( V% p6 }& l# Y
%以6月6的间隔十五分钟的发电量作为目标向量
) k- |, W2 \! x0 w" i* m
T=PA(28,:);
* P' e( f/ x1 ]: r2 t
%创建一个BP神经网络,每一个输入向量的取值范围为[0 ,1],隐含层有22个神经元,
# P$ s4 _& m) y
%输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为%logsig,
" o2 M* g1 X8 m
%训练函数为梯度下降函数,即标准学习算法
) D& H* T- h; ]6 ^' H. J6 D
for i=1:21
- }) V* c6 {. m5 [% y; r
a(i,1)=0;
+ I- D3 P3 j z: ~$ M; e% N, \
a(i,2)=1;
0 h! D2 w+ }4 R8 \. g2 u9 H( ~
end
( y) {6 G' f' C9 q+ } ~
net=newff(a,[21,1],{'tansig','logsig'},'traingd');
% B: C2 P- ~# m. y4 a* [2 W
net.trainParam.epochs=30000;
+ b1 }' p; H* T( V
net.trainParam.goal=0.01;
* z+ K/ h0 K" \9 \* z% E
%设置学习速率为0.1
: C3 P( l3 n/ ~* Z+ P9 t4 `
LP.lr=0.1;
" R4 c) l! a5 ]& C; [+ @2 m
%训练网络
$ b0 p. x' d+ v7 p, o
net=train(net,P,T);
7 m6 |1 A9 x8 }8 x
%预测6月6的发电量数据
4 a3 c! K( V1 h J6 |
T1=sim(net,P);%预测值
+ N3 ^6 _; Z1 @. `2 U7 G0 A8 d c
%PA.6月6日发电量真实值
3 n5 [. l9 }$ {" l9 q8 C/ Q# t
T0=PA(28,:);
1 z* K* N+ I n- P/ b+ ?# O
%预测值与实际值的误差
; d6 ^4 [2 B6 Z5 C8 y( ^
for i=1:N(1,2)
' c- F9 h: ]' p
error(1,i)=T1(1,i)-T0(1,i);
4 x1 I0 S# }- h, j
end
% V1 Q2 J, h6 |
%绘制误差图
" V$ F% t) |- y; J
figure(1)
) Q3 S0 M* N" f7 u
plot(1:N(1,2),error(1,1:N(1,2)),'-*')
7 X i: U" D# [/ n
grid on
z/ l; w( e i+ x% A
xlabel('时点x'),ylabel('发电功率误差y');
# Y+ ~1 @7 ]) b9 c9 z+ ^9 P, l
title('PA6.6.0.0-6.6.23.45发电功率误差图像')
. V/ e. M! `, c$ w7 W5 E
%绘制实时函数图
; b) g7 i2 ~4 o# c$ B# x2 r/ M
figure(2)
% m: q2 r5 x( b. |5 y+ L
plot(1:N(1,2),T0(1,:),1:N(1,2),T1(1,:),'r')
7 M1 N/ k; N" a* N
grid on
% Y' u/ {$ p3 V/ b6 C5 c: Y& f
legend('实际值','预测值',2)
% \! y5 Y+ g3 {) [, C" O
xlabel('时点x'),ylabel('发电功率y');
$ o' @; {3 E# H8 c6 V
title('PA6.6.0.0-6.6.23.45发电功率实时函数图像')
& f7 o+ s) E4 B6 H' M7 [( f, F
web('http://www.ilovematlab.cn/forum-238-1.html','-browser')
5 x+ o( `* H: w8 \0 _$ O
1 p" |$ Y% q& ~2 z8 M' H; g
+ C5 |4 y7 B! A' D/ \0 l
4 b4 c/ u0 m8 K4 W0 W- `* ?+ Y0 R
2 i- W, h3 Q- p" J9 a+ g
一本书关于预测发电量的BP的程序。我稍微有点纳闷,既然你已经知道了6月6日的实际值,并且都拿相应的数据来作目标向量了,还利用神经网络来预测6月6日的发电量,意义何在?
h! \0 r0 \( w* v
1 _/ a6 p* {- d0 \* r' X4 t
作者:
fg8741142
时间:
2015-4-22 14:49
你要明白神经网络是干嘛用的,你这个代码做出来的网络,可能是预测那些不知道实际发电量的,6月6日的数据是用来训练网络的,同时对比误差查看网络的性能
6 A2 c' \1 G$ C/ @8 M
作者:
蘑菇先生
时间:
2015-7-16 15:14
误差也有分为训练误差和测试误差的,具体你可以参考统计学习方法相关资料。
# S0 V A9 T) x8 K! v& j G) g( N6 _
作者:
木__易
时间:
2015-8-17 08:55
. U% K& z$ H2 \( q
作者:
杨地雷
时间:
2015-8-21 09:01
为了验证神经网络的准确度吧
+ X. X- P; n" m2 `) B, f; }" m
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5