aeobea 发表于 2006-11-28 12:21

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)

F117_ren_0 发表于 2006-11-28 18:58

好复杂的程序,本来可以很简单的,被你搞的,看的人头大.

aeobea 发表于 2006-11-28 20:34

老兄说的是,我因为是初次使用MATLAB,BP也是第一次编写,总感觉程序写出来不舒服。
所以请教各位高手给把把脉。
页: [1]
查看完整版本: BP做预测(附源码),中间遇到的问题请大家讨论帮助