本次运行测试环境MATLAB2018b;
本次预测基本任务是回归,多变量输入,单变量输出;
主要研究问题不限于交通预测、负荷预测、气象预测、经济预测等。
LSTM和SVR组合预测,结合LSTM序列提取优势和SVR非线性提取优势,组合预测具体介绍如下。
提出了一种基于长短时记忆神经网络算法的支持向量机(LSTM-SVR)的预测方法,为了保证支持向量机预测结果的准确性,选用网格搜索法对支持向量机参数进行优化处理。为了减小在预测算法中,由于误差的传递导致最终预测结果与实际结果产生较大偏离,在预测运算过程中对采用长短时记忆神经网络组合预测,对预测结果进行组合。
- 数据预处理,分别对冲击性负荷影响因素、稳定性负荷影响因素进行数据归一化处理,使其数值为[0,1];
- 按照网络各层之间的权重参数,网络的第t层,其权重参数( wt
,bt) 由上一层的数据决定。- 将上一层输入输出作为LSTM 网络模型的输入和输出进行训练,调整模型参数,代价函数为平方重构误差。
- 完成训练过程后,利用负荷数据,通过LSTM 模型输出结果,将得到的负荷预测结果进行反归一化处理,得到负荷真实预测值。
- 将得到的负荷预测值与实际负荷进行对比,采用相对误差作为衡量标准,衡量LSTM网络模型的预测准确性。
- 数据处理与归一化,输入数据与2.1 节中相同,采用相同的预处理方式。
- 利用试验查找方法,得到最佳惩罚参数C、核函数和不敏感损失函数ε。
- 仿真测试,输入参数,进行仿真测试。
- 数据反归一化,得到数据预测值。
- 将得到的负荷预测值与实际负荷进行对比,采用相对误差作为衡量标准,衡量SVM 模型的预测准确性。
%% 组合模型
%%
%% 数据导入
clc;clear;warning off;
data= xlsread('nndata.xlsx', 'sheet1', 'A2:G350');
load LSTMoutput
load SVMoutput
%%
nwhole=length(data);
%计算数据长度
train_ratio=0.90;
ntrain=round(nwhole*train_ratio);
ntest =nwhole-ntrain;
R_train = output_train;
LSTM_train = LSTMoutput_train';
SVM_train = SVMoutput_train;
R_test = output_test;
LSTM_test = LSTMoutput_test';
SVM_test = SVMoutput_test;
%% CDM
options = optimset;
[W_train,E_train] = fmincon(@(W)ObjectFunction(W,R_train,LSTM_train,SVM_train),W0,LPA,LPB,Aeq,Beq,LB,UB,NONLCON,options);
[W_test,E_test] = fmincon(@(W)ObjectFunction(W,R_test,LSTM_test,SVM_test),W0,LPA,LPB,Aeq,Beq,LB,UB,NONLCON,options);
fprintf('W_LSTM_test=%f,W_SVM_test=%f',W_test(1),W_test(2))
C_test =W_test(1)*LSTM_test +W_test(2)*SVM_test;
fprintf('\n\n');
%-------------------------------------------------------------------------------------
%%
%% 数据输出
%-------------------------------------------------------------------------------------
disp("——————组合模型预测结果——————————")
disp("组合模型预测值 真实值 组合模型误差 组合模型相对误差 ")
disp([C_test R_test C_error_test C_pererror_test])
disp('预测绝对平均误差MAE');
disp('LSTM SVM 组合模型');
disp([LSTM_MAE SVM_MAE C_MAE]);
disp('预测平均绝对误差百分比MAPE');
disp('LSTM SVM 组合模型');
disp([LSTM_MAPE SVM_MAPE C_MAPE]);
disp('预测均方误差MSE')
disp('LSTM SVM 组合模型');
disp([LSTM_MSE SVM_MSE C_MSE]);
disp('预测均方根误差RMSE')
disp('LSTM SVM 组合模型');
disp([LSTM_RMSE SVM_RMSE C_RMSE]);
%% 数据可视化分析
%%
%测试数据 模型对比
%-------------------------------------------------------------------------------------
figure();
plot(LSTM_test,':.','Color',[128 0 255]./255,'linewidth',0.8,'Markersize',3) %测试数据分析
hold on
plot(SVM_test, ':*','Color',[64 255 64]./255,'linewidth',0.8,'Markersize',3) %测试数据分析
hold on
plot(C_test,':+','Color',[255 64 64]./255,'linewidth',0.8,'Markersize',3) %测试数据分析
hold on
plot(R_test','k--') %实际数据分析
legend('LSTM预测测试数据','SVM预测测试数据','组合预测测试数据','实际分析数据','Location','NorthWest','FontName','宋体');
string2 = {'网络模型结果及真实值'};
title(string2,'fontsize',12,'FontName','宋体')
xlabel('时间','fontsize',12,'FontName','宋体');
ylabel('数值','fontsize',12,'FontName','宋体');
%-------------------------------------------------------------------------------------
figure()
%误差
plot(LSTM_error_test,':.','Color',[128 0 255]./255,'linewidth',0.8,'Markersize',3)
hold on
plot(SVM_error_test, ':*','Color',[64 255 64]./255,'linewidth',0.8,'Markersize',3)
hold on
plot(C_error_test,':+','Color',[255 64 64]./255,'linewidth',0.8,'Markersize',3)
legend('LSTM测试误差','SVM测试误差','组合测试误差','Location','NorthWest','FontName','宋体');
title('网络预误差','fontsize',12,'FontName','宋体')
ylabel('误差','fontsize',12,'FontName','宋体')
%-------------------------------------------------------------------------------------
figure()
plot(LSTM_pererror_test,':.','Color',[128 0 255]./255,'linewidth',0.8,'Markersize',3)
hold on
plot(SVM_pererror_test, ':*','Color',[64 255 64]./255,'linewidth',0.8,'Markersize',3)
hold on
plot(C_pererror_test,':+','Color',[255 64 64]./255,'linewidth',0.8,'Markersize',3)
legend('LSTM测试相对误差','SVM测试相对误差','组合测试相对误差','Location','NorthWest','FontName','宋体');
title('网络预测相对误差','fontsize',12,'FontName','宋体')
ylabel('误差','fontsize',12,'FontName','宋体')
xlabel('样本','fontsize',12,'FontName','宋体')
- cdm是组合预测程序,调用LSTMoutput和SVMoutput结果;
- lstmnn是lstm预测程序,调用funlstm子函数;
- svmnn是svr预测程序,调用SVMRP子函数。
- 本程序在命令窗口实现数据输出,直观,易懂。
- 本人运行环境为MATLAB2018b,其中svmnn需要配置libsvm安装环境。
- 负荷预测对电力系统的运行规划、发电调度、设备检修起着至关重要的作用,智能算法包括神经网络、支持向量机、极限学习机和决策树等在电力负荷预测中得到广泛应用。
- 上述电力预测方法都是针对在冲击负荷不大的情况下进行钢铁企业短期负荷预测,当冲击负荷较大时,其精度无法保证。本研究充分考虑大型工业地区负荷组成,将LSTM 与SVM 算法相结合。
- 电力负荷的组成因地区不同而不同,工业用户的用电行为因不同的行业而有较大的区别,特别是一些大型工业地区,用电计划和规律性差,给负荷预测造成了很大的难度。
- 本研究考虑到大型工业地区负荷的特点和发展规律,以某地区钢铁负荷占比高的负荷预测为例,根据对负荷组成和每日负荷规律,将负荷分解成冲击性负荷和其他稳定性负荷,两部分都分别采用长短期记忆网络算法和支持向量机算法进行预测,最后进行融合预测。
- 短期负荷预测的影响因素较多,如果单纯考虑一种影响因素,很难达到精确的预测效果,尤其是对工业地区有激增或突降的负荷,难以精确拟合拐角点处的负荷量。因此在选取负荷预测的输入量时,既要考虑历史负荷的影响,又要考虑工业地区钢铁产量的影响,同时分析了铁矿石期货价格、日期类型、天气、电价等因素。
[1] https://blog.csdn.net/kjm13182345320/article/details/120621147?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/120406657?spm=1001.2014.3001.5502