• 大小: 2.02MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-10
  • 语言: 其他
  • 标签: LSSVM  PSO  

资源简介

自己写的PSO优化的LSSVM代码,用于对电力负荷的时间序列进行预测,含有原始数据序列。

资源截图

代码片段和文件信息

%% 文件说明
% main.m   : 主文件,进行预测,将生成的网络保存到 ‘nets.mat‘中
% main_back.m : 使用‘nets.mat‘重现结果
% nets.mat : 保存 3 * 48 个grnn网络,用于结果重现
% QLD1.csv : 原始数据(用的什么时候的数据你点开看一下就明白了)
% QLD1.mat : 导成matlab格式的数据
% optimizeGrnn.m : 使用模拟退火优化grnn的spread参数
% adaboost : 组合算法 输出结果的第一个数是组合后的mape

%% 原理
% 一周共使用48个神经网络
% 输入前一个周7个相同时间点的数据 得到 本周7个相同时间点的数据

%% 注意
% 老婆大人你只需要注意我加 ‘%%‘ 标注的代码
% 不用执行本文件,运行‘main_back.m‘即可看到结果
% net1MeanMape =
%    0.0165        <- grnn1
% net2MeanMape =
%    0.0168        <- grnn2
% net3MeanMape =
%    0.0168        <- grnn3
% combineMeanMapes =
%    0.0157        <- adaboost

clc;
close;
clear;

testWeekNum  = 1;
%% 训练数据周数
trainWeekNum = 228;

load QLD1;
QLD1 = reshape(QLD1 48 length(QLD1)/48);

testWeekInd  = 1;
trainWeekInd = 1 + (1:trainWeekNum);

testWeekX = [];
testWeekY = [];
for yWeekInd = testWeekInd
    yWeekDayInd = (yWeekInd*7-6):(yWeekInd*7);
    xWeekDayStart = yWeekInd * 7 + 1;
    xWeekDayEnd = (yWeekInd + 1) * 7;
    xWeekDayInd = xWeekDayStart:xWeekDayEnd;
    yDayData = QLD1(: yWeekDayInd);
    xDayData = QLD1(: xWeekDayInd);    
    testWeekY = [testWeekY yDayData‘];
    testWeekX = [testWeekX xDayData‘];
end

trainWeekX = [];
trainWeekY = [];
for yWeekInd = trainWeekInd
    yWeekDayInd = (yWeekInd*7-6):(yWeekInd*7);
    xWeekDayStart = yWeekInd * 7 + 1;
    xWeekDayEnd = (yWeekInd + 1) * 7;
    xWeekDayInd = xWeekDayStart:xWeekDayEnd;
    yDayData = QLD1(: yWeekDayInd);
    xDayData = QLD1(: xWeekDayInd);    
    trainWeekY = [trainWeekY yDayData‘];
    trainWeekX = [trainWeekX xDayData‘];
end

nets = {};
netMapes = [];

for time = 1:48
    disp([‘ time:‘ num2str(time)]);

    testInd  = (0:(testWeekNum-1))  * 48 + time;
    trainInd = (0:(trainWeekNum-1)) * 48 + time;

    global trainX trainY xmap ymap testX testY;

    testX  = testWeekX(: testInd);
    testY  = testWeekY(: testInd);
    trainX = trainWeekX(:trainInd);
    trainY = trainWeekY(:trainInd);

    [trainX xmap] = mapminmax(trainX 0.0000001 1);
    [trainY ymap] = mapminmax(trainY 0.0000001 1);
    testX = mapminmax(‘apply‘ testX xmap);

    [bestGam bestSig2] = optimizeLSSVM();
    rand(‘seed‘ 2);
    net = initlssvm(trainX‘ trainY‘ ‘function estimation‘ bestGam bestSig2 ‘RBF_kernel‘);
    net = trainlssvm(net);
    ySim = simlssvm(net testX‘)‘;
    ySim = mapminmax(‘reverse‘ ySim ymap);
    mape_ = mape(testY ySim);

    nets{time 1} = net;
    netMapes = [netMapes mape_];

end

meanMape = mean(netMapes)

save nets nets;

    














 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-08-15 21:25  lssvm+pso\
     文件        2792  2016-08-15 21:20  lssvm+pso\main.m
     文件        1835  2016-08-15 21:24  lssvm+pso\main_back.m
     文件         108  2016-08-15 21:07  lssvm+pso\mape.m
     文件     1818832  2016-08-15 21:23  lssvm+pso\nets.mat
     文件         671  2016-08-15 21:21  lssvm+pso\optimizeLSSVM.asv
     文件         671  2016-08-15 21:21  lssvm+pso\optimizeLSSVM.m
     文件        4557  2016-08-15 21:12  lssvm+pso\PSO.m
     文件      292213  2016-08-15 21:07  lssvm+pso\QLD1.mat

评论

共有 条评论