回归预测 | MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)多输入单输出

回归预测 | MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)多输入单输出

目录

    • 回归预测 | MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)多输入单输出
      • 基本介绍
      • 模型介绍
        • LSTM模型
        • SVR模型
        • LSTM-SVR模型
      • 程序设计
      • 拓展学习
      • 参考资料
      • 致谢

基本介绍

本次运行测试环境MATLAB2018b;
本次预测基本任务是回归,多变量输入,单变量输出;
主要研究问题不限于交通预测、负荷预测、气象预测、经济预测等。
LSTM和SVR组合预测,结合LSTM序列提取优势和SVR非线性提取优势,组合预测具体介绍如下。

模型介绍

提出了一种基于长短时记忆神经网络算法的支持向量机(LSTM-SVR)的预测方法,为了保证支持向量机预测结果的准确性,选用网格搜索法对支持向量机参数进行优化处理。为了减小在预测算法中,由于误差的传递导致最终预测结果与实际结果产生较大偏离,在预测运算过程中对采用长短时记忆神经网络组合预测,对预测结果进行组合。

LSTM模型

  • LSTM 属于循环神经网络( recurrent neural network,RNN) 的一种,其特殊之处在于RNN 仅具有记忆暂存的功能,LSTM 兼具长短期记忆功能,LSTM 解决了RNN 的长期依赖问题,其特点是在RNN 各层结构单元中添加了输入门、遗忘门和输出门等闸门。通过“门”控制记忆状态、存储任意时间和距离的信息,解决了RNN 神经网络只有短期记
    忆、没有长期记忆的问题。
    回归预测 | MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)多输入单输出_第1张图片
  • LSTM 在t 时刻的输入为xt,输出为yt,神经元记忆状态为st,其输出门it、遗忘门ft、输出门ot;
  • 构建基于长短期记忆网络负荷预测模型,包括数据处理、计算激活函数、调整参数、训练模型、评价结果等。
  • 数据预处理,分别对冲击性负荷影响因素、稳定性负荷影响因素进行数据归一化处理,使其数值为[0,1];
  • 按照网络各层之间的权重参数,网络的第t层,其权重参数( wt
    ,bt) 由上一层的数据决定。
  • 将上一层输入输出作为LSTM 网络模型的输入和输出进行训练,调整模型参数,代价函数为平方重构误差。
  • 完成训练过程后,利用负荷数据,通过LSTM 模型输出结果,将得到的负荷预测结果进行反归一化处理,得到负荷真实预测值。
  • 将得到的负荷预测值与实际负荷进行对比,采用相对误差作为衡量标准,衡量LSTM网络模型的预测准确性。

SVR模型

  • SVM 算法是一种基于最小化结构风险的机器统计学习理论,通过间隔最大化的学习策略,最终转化为一个凸二次规划问题的求解。
  • SVM 在预分析中具有适应小样本学习和强鲁棒性的特点,能补充基于长短期记忆网络算法对大量样本的需求。
  • SVR是SVM用于回归的任务。
  • 通过直接法或间接法构造合适的回归任务,将某时刻下的影响因素
    视为回归的依据,而该时刻负荷的预测值视为最终回归结果的标签。主要的预测过程如下。
  • 数据处理与归一化,输入数据与2.1 节中相同,采用相同的预处理方式。
  • 利用试验查找方法,得到最佳惩罚参数C、核函数和不敏感损失函数ε。
  • 仿真测试,输入参数,进行仿真测试。
  • 数据反归一化,得到数据预测值。
  • 将得到的负荷预测值与实际负荷进行对比,采用相对误差作为衡量标准,衡量SVM 模型的预测准确性。

LSTM-SVR模型

  • LSTM 算法时序性强,能够充分挖掘历史数据的规律,其缺点是要求样本的数量多; SVM 算法具有非线性映射和小样本学习的优势,但时序性差。
  • 为充分融合二者的优势提出融合LSTM 和SVM 算法的钢铁电力短期负荷预测,权重分配采用最小二乘算法。

回归预测 | MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)多输入单输出_第2张图片
回归预测 | MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)多输入单输出_第3张图片

程序设计

  • 主程序
%% 组合模型
%%
%% 数据导入
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','宋体')
  • 完整程序和数据下载:MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)多输入单输出
    回归预测 | MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)多输入单输出_第4张图片
  • cdm是组合预测程序,调用LSTMoutput和SVMoutput结果;
  • lstmnn是lstm预测程序,调用funlstm子函数;
  • svmnn是svr预测程序,调用SVMRP子函数。
  • 本程序在命令窗口实现数据输出,直观,易懂。
  • 本人运行环境为MATLAB2018b,其中svmnn需要配置libsvm安装环境。
  • 预测效果
    回归预测 | MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)多输入单输出_第5张图片
    回归预测 | MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)多输入单输出_第6张图片

拓展学习

  • 负荷预测对电力系统的运行规划、发电调度、设备检修起着至关重要的作用,智能算法包括神经网络、支持向量机、极限学习机和决策树等在电力负荷预测中得到广泛应用。
  • 上述电力预测方法都是针对在冲击负荷不大的情况下进行钢铁企业短期负荷预测,当冲击负荷较大时,其精度无法保证。本研究充分考虑大型工业地区负荷组成,将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

致谢

  • 大家的支持是我写作的动力!
  • 感谢大家!

你可能感兴趣的:(回归预测,LSTM,SVR,LSTM-SVR,多输入单输出)