数学建模社区-数学中国
标题:
数模小白关于BP的一些问题
[打印本页]
作者:
ChildofAtlantis
时间:
2015-4-19 15:43
标题:
数模小白关于BP的一些问题
%PA 6月6:0:0 计算的MATLAB 程序如下:BP神经网络预测
. B- o* h+ ^5 P
%6月6位于第28行
+ M7 T( f @$ [0 ~, `+ E
clc,clear
9 _1 H# o) @5 j
load ('data.mat')%原始数据以列向量的方式存放在workplace文件中
3 ^, h' [) K% B4 M3 a) R
PA=PA(2:29,:);
# H5 K* N3 H2 K: a8 u
%数据的标准化
6 B. m! J( [: Z9 H) [3 ]3 ~% ]
N=size(PA);
" E- j- U) s+ F; f( Y6 F
for j=1:N(1,2)
' q$ A1 K) s3 o! _1 i% X3 P
PAHminmax=minmax(PA(:,j)');
$ r3 |; |! g i" L
for i=1:N(1,1)
4 l( c) I7 s, u$ |8 n$ X5 x8 P- l
PA(i,j)=(PA(i,j)-PAHminmax(1,1))/(PAHminmax(1,2)-PAHminmax(1,1));
5 R2 [/ y' e# n( [
end
- L" @4 F* Z* W; ]
end
2 K/ d( y4 x8 l1 }3 `: t$ X/ |
%以每天的从0时计数起,每隔十五分钟作为输入
% v" x3 H' v$ a ` e: P
P=PA(7:27,:);
7 h$ G( `% V. g, {* _
%以6月6的间隔十五分钟的发电量作为目标向量
$ `! Q0 h x5 }3 x
T=PA(28,:);
1 |, ~6 B# q5 s( I, r3 T z8 [# ^
%创建一个BP神经网络,每一个输入向量的取值范围为[0 ,1],隐含层有22个神经元,
; y1 m2 X6 T/ e( X! l0 E1 |4 h, {
%输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为%logsig,
" E7 K) l8 {' C3 A
%训练函数为梯度下降函数,即标准学习算法
! s: \1 N8 ~( H0 E2 F, a
for i=1:21
3 p0 L) u4 B0 ?
a(i,1)=0;
0 [7 i! U& L2 r1 B) m1 T' R- z
a(i,2)=1;
4 P2 c6 Y/ ~( r. K/ U: H
end
& \+ s. m& Z+ L# x. B; T4 m
net=newff(a,[21,1],{'tansig','logsig'},'traingd');
7 i+ }; ?" c3 \' [9 V# X) S
net.trainParam.epochs=30000;
# ~4 W2 Y# K# p( L: g$ T: R
net.trainParam.goal=0.01;
+ |0 l5 U5 o7 ^+ J& e$ o
%设置学习速率为0.1
+ u4 n6 x e8 H+ v# w2 z/ [
LP.lr=0.1;
% B: u( ~5 Z$ |5 H; ~
%训练网络
- s5 P5 g1 Z& z4 ~, ]; r- D9 Y1 W
net=train(net,P,T);
& ~" ^5 ~$ d: B; Q" J, R
%预测6月6的发电量数据
( e, u! Q5 p7 A2 T. M6 T1 b1 ?
T1=sim(net,P);%预测值
5 L7 q) k8 Y1 G/ N
%PA.6月6日发电量真实值
3 _/ H1 C2 S0 r, j1 f' X7 L4 p
T0=PA(28,:);
) t; l. o8 M8 Q7 i6 l8 e3 l
%预测值与实际值的误差
{# R+ e- J6 T- d% d8 Y
for i=1:N(1,2)
6 y- b; H4 Z) K5 v6 H" s
error(1,i)=T1(1,i)-T0(1,i);
9 q$ O; k$ a# D/ p, H1 Q
end
6 K2 @9 J! k2 }0 K! G
%绘制误差图
5 y( w a0 d0 @4 _9 h: u+ J' H
figure(1)
8 m* t" P* S/ N5 d$ ~3 I
plot(1:N(1,2),error(1,1:N(1,2)),'-*')
1 m3 Y* u" D5 C6 C/ k: G7 B
grid on
" y; G0 `) S1 W& T! |
xlabel('时点x'),ylabel('发电功率误差y');
8 D3 _. `8 X$ Q$ X% M8 F" G
title('PA6.6.0.0-6.6.23.45发电功率误差图像')
' \ ~- v6 T3 m
%绘制实时函数图
: M( j# ~5 A# C2 {$ X% t9 v
figure(2)
( t) j+ j9 e, D: L+ }
plot(1:N(1,2),T0(1,:),1:N(1,2),T1(1,:),'r')
0 h% x7 y" y7 Q1 ?) f
grid on
" D, Y; q$ w# A2 O# | f/ D5 ~
legend('实际值','预测值',2)
! ?# W$ ~) H( `3 o9 c. |" @; a
xlabel('时点x'),ylabel('发电功率y');
' e' G) W8 z; H Y( z! v0 J
title('PA6.6.0.0-6.6.23.45发电功率实时函数图像')
1 N' ]3 x0 K/ |* V) p( _: X6 Q
web('http://www.ilovematlab.cn/forum-238-1.html','-browser')
0 `2 E/ J: e4 C% F- `# J/ o; L) }
% b. C, [" [: r6 H
- V& S/ x' u% `6 h. O
; G, x! L/ K2 r' g e3 ^4 ~
. i7 ?! h6 U& J1 T
一本书关于预测发电量的BP的程序。我稍微有点纳闷,既然你已经知道了6月6日的实际值,并且都拿相应的数据来作目标向量了,还利用神经网络来预测6月6日的发电量,意义何在?
: a7 ~$ g6 f/ b( F6 b/ s7 b$ \; Y
, @! L3 U/ L' [
作者:
fg8741142
时间:
2015-4-22 14:49
你要明白神经网络是干嘛用的,你这个代码做出来的网络,可能是预测那些不知道实际发电量的,6月6日的数据是用来训练网络的,同时对比误差查看网络的性能
) ?" ]$ U+ s& @. |
作者:
蘑菇先生
时间:
2015-7-16 15:14
误差也有分为训练误差和测试误差的,具体你可以参考统计学习方法相关资料。
: c5 l/ i y3 A& M; T7 N2 H
作者:
木__易
时间:
2015-8-17 08:55
; [2 V' f3 y' F* |/ y
作者:
杨地雷
时间:
2015-8-21 09:01
为了验证神经网络的准确度吧
2 e! q( [% h1 ^$ e; v" V
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5