声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1171|回复: 2

[编程技巧] BP做预测(附源码),中间遇到的问题请大家讨论帮助

[复制链接]
发表于 2006-11-28 12:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
刚开始学习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 = [train_s; up(i-1,seg) up(i-2,seg) up(i-3,seg) up(i-4,seg) up(i-5,seg) up(i-6,seg) up(i-7,seg) ul(i-1,seg) ul(i-2,seg) ul(i,seg)];
        %仅用前七日电价 50-70%
        %加上星期因素  25%-50%  改1-7为0 1,周6/7为1,其余为0 27%-40%-27%
        train_s = [train_s; up(i-1,seg) up(i-2,seg) up(i-3,seg) up(i-4,seg) up(i-5,seg) up(i-6,seg) up(i-7,seg) ul(i-1,seg) ul(i-2,seg) ul(i,seg) w(i,2)];
        %训练用目标向量 1*n,预测日电价
        train_d = [train_d; up(i,seg)];         
    end
    train_s = train_s';  train_d = train_d';

    for i=test_ds: test_de   
        %测试用输入向量
        %test_s = [test_s; up(i-1,seg) up(i-2,seg) up(i-3,seg) up(i-4,seg) up(i-5,seg) up(i-6,seg) up(i-7,seg) ul(i-1,seg) ul(i-2,seg) ul(i,seg)];
        test_s = [test_s; up(i-1,seg) up(i-2,seg) up(i-3,seg) up(i-4,seg) up(i-5,seg) up(i-6,seg) up(i-7,seg) ul(i-1,seg) ul(i-2,seg) ul(i,seg) w(i,2)];
        %测试用目标向量
        test_d = [test_d; up(i,seg)];        
    end
    test_s = test_s';  test_d=test_d';

    %建立BP神经网络
    net=newff(minmax(train_s),[4,1],{'tansig','tansig'},'trainlm');  %建立BP网络 4个隐含层,1个输出层  fy:误差在20%以内
    % 4,1 tansig,purelin, traingdx tra to test 15%  15%  11%  11%
    % traingd  7%  35%  24%  27% 17%
    % trainrp  8%  12%  7%  12%   (epochs<100 goal met)
    % graincgf 9%  7%  13%   13%  (100)
    % traincgp  10% 12% 6% 8%(82)
    % traincgb 11(13)  13(44) 9(57)  18(13)  // 40(40) 33(213) 40(84)
    % trainscg  9(118) 6(143) 12(496) 11(387)       4
    % trainbfg  7(45) 10(47) 10(193) 6(36)      2 49(83) 30(28) 34(73) 18(0)
    % trainoss  9(1439) 8(720) 8(337) 7(2192)       3
    % trainlm  6(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=[err;(test_d - out)./test_d];
    %out=sim(net,train_s);  
    %err=[err;(train_d - out)./train_d];  %计算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)
回复
分享到:

使用道具 举报

发表于 2006-11-28 18:58 | 显示全部楼层
好复杂的程序,本来可以很简单的,被你搞的,看的人头大.
 楼主| 发表于 2006-11-28 20:34 | 显示全部楼层
老兄说的是,我因为是初次使用MATLAB,BP也是第一次编写,总感觉程序写出来不舒服。
所以请教各位高手给把把脉。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-13 11:47 , Processed in 0.064884 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表