时序预测 | MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)时间序列预测
效果一览
基本介绍
本次运行测试环境MATLAB2018b;
MATLAB实现LSTM-SVR(长短期记忆神经网络-支持向量机)时间序列预测;主要研究问题不限于交通预测、负荷预测、气象预测、经济预测等。LSTM和SVR组合预测,结合LSTM序列提取优势和SVR非线性提取优势,组合预测具体介绍如下。
模型介绍
提出了一种基于长短时记忆神经网络算法的支持向量机(LSTM-SVR)的预测方法,为了保证支持向量机预测结果的准确性,选用网格搜索法对支持向量机参数进行优化处理。为了减小在预测算法中,由于误差的传递导致最终预测结果与实际结果产生较大偏离,在预测运算过程中对采用长短时记忆神经网络组合预测,对预测结果进行组合。
LSTM模型
- LSTM 属于循环神经网络( recurrent neural network,RNN) 的一种,其特殊之处在于RNN 仅具有记忆暂存的功能,LSTM 兼具长短期记忆功能,LSTM 解决了RNN 的长期依赖问题,其特点是在RNN 各层结构单元中添加了输入门、遗忘门和输出门等闸门。通过“门”控制记忆状态、存储任意时间和距离的信息,解决了RNN 神经网络只有短期记
忆、没有长期记忆的问题。
- 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 算法的钢铁电力短期负荷预测,权重分配采用最小二乘算法。
程序设计
- 完整程序和数据下载:私信博主。
- 主程序
nwhole=length(data);
%计算数据长度
train_ratio=0.90;
ntrain=round(nwhole*train_ratio);
%% 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]);
W_LSTM_train=0.780212,W_SVM_train=0.219788
——————组合模型预测结果——————————
预测绝对平均误差MAE
LSTM SVM 组合模型
9.7268 10.3683 9.1884
预测平均绝对误差百分比MAPE
LSTM SVM 组合模型
0.0052 0.0056 0.0049
预测均方误差MSE
LSTM SVM 组合模型
1.0e+04 *
1.1857 1.3478 1.0736
预测均方根误差RMSE
LSTM SVM 组合模型
108.8883 116.0951 103.6134
参考资料
[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
致谢
- 大家的支持是我写作的动力!
- 感谢大家!