BP做预测(附源码),中间遇到的问题请大家讨论帮助
刚开始学习BP及使用MATLAB,出现一些问题,请大家帮助使用bp算法进行24时点的价格预测
1)24个时段分别预测,调用sim,到最后图形输出就象死了一样,为何?(w问号处)
2)预测精度平均测算下来才能达到20-50%,实在太大了,总有几个高峰点,为何呢?
3)还有无更好的方法或改进的地方?
多谢。
源码如下:
clf;clc;clear;
load pjm_0102.mat;%内含ul,up,ut三个经过归一化的矩阵,以及l,p,t 和w(星期)
t_seg = 24;% 时段
err=[]; errv=[];
train_ds=32;train_de=92; %ds起始日期%de截至日期
test_ds=93;test_de=99; %预测8月1日-8月10日
for seg =1 : t_seg
train_s=[]; train_d=[]; test_s=[]; test_d=[]; out=[];
for i = train_ds : train_de %68,7月8日92,7月31日
%训练用输入向量 10*n 1-7行为前七天电价,8-9行为前两天负荷,10行为预测日负荷,n为样本数, 需取逆才可输入 : 50%
%train_s = ;
%仅用前七日电价 50-70%
%加上星期因素25%-50%改1-7为0 1,周6/7为1,其余为0 27%-40%-27%
train_s = ;
%训练用目标向量 1*n,预测日电价
train_d = ;
end
train_s = train_s';train_d = train_d';
for i=test_ds: test_de
%测试用输入向量
%test_s = ;
test_s = ;
%测试用目标向量
test_d = ;
end
test_s = test_s';test_d=test_d';
%建立BP神经网络
net=newff(minmax(train_s),,{'tansig','tansig'},'trainlm');%建立BP网络 4个隐含层,1个输出层fy:误差在20%以内
% 4,1 tansig,purelin, traingdx tra to test 15%15%11%11%
% traingd7%35%24%27% 17%
% trainrp8%12%7%12% (epochs<100 goal met)
% graincgf 9%7%13% 13%(100)
% traincgp10% 12% 6% 8%(82)
% traincgb 11(13)13(44) 9(57)18(13)// 40(40) 33(213) 40(84)
% trainscg9(118) 6(143) 12(496) 11(387) 4
% trainbfg7(45) 10(47) 10(193) 6(36) 2 49(83) 30(28) 34(73) 18(0)
% trainoss9(1439) 8(720) 8(337) 7(2192) 3
% trainlm6(9) 9(6) 5(9) 10(7) 1/1 17%(6) 50(4) 12(7)41(6)
%
%训练
net.trainParam.epochs=3000;
net.trainParam.show=50;
net.trainParam.lr=0.01;
%net.trainParam.mu=0.02;
net.trainParam.goal=0.0001;
tic;
net=train(net,train_s,train_d); %训练
toc;
%开始预测
out=sim(net,test_s);
err=;
%out=sim(net,train_s);
%err=;%计算24各点的多样本误差
end
save mcp_bp_err.mat err;
clf;clc;clear;
load mcp_bp_err.mat;
errv=mean(abs(err),2)';%24各点的多样本平均误差
% plot(err_seg_v); %???
erra=mean(errv) 好复杂的程序,本来可以很简单的,被你搞的,看的人头大. 老兄说的是,我因为是初次使用MATLAB,BP也是第一次编写,总感觉程序写出来不舒服。
所以请教各位高手给把把脉。
页:
[1]