【MATLAB第65期】基于LSTM长短期记忆网络的多输入单输出数据预测未来思路介绍(短期预测)
往期第13期已实现多输入单输出滑动窗口回归预测
多输入单输出滑动窗口回归预测
往期第54期已实现多输入多输出滑动窗口回归预测
多输入多输出滑动窗口回归预测
一、实现效果
本次实现多输入单输出数据预测未来思路,针对短期预测。
1.训练过程:
2.测试集拟合效果:
“RMSE2” “1.4041”
“MAPE2” “0.059405”
3.预测未来效果:
二、数据构造与处理:
构造原则:滑动窗口数=预测未来数量
原数据:
198行(代表198天),21列数据,其中前20列为变量,第21列为因变量。
若预测未来因变量, 需要构造现在时刻的输入,未来时刻的输出数据。
假设预测未来18个数据,则第一个样本可以为:
输入day1-18的 X1-X20数据(数据矩阵:18×20),输出day19-36的 Y19-Y36(18×1)
最后一个样本为:
输入day163-180的 X1-X20数据(数据矩阵:18×20),输出day181-198的 Y181-Y198(18×1)
前90%数据训练(146个),后10%数据测试(17个)
预测集输入数据为:
输入day181-198的 X1-X20数据(数据矩阵:18×20),输出day199-216的Y199-Y216(18×1)
三、LSTM参数设置
inputSize = size(input,1); %数据输入x的特征维度
outputSize = k; %数据输出y的特征维度
numhidden_units1=100;
numhidden_units2=100;
% lstm
layers = [ ...
sequenceInputLayer(inputSize,'name','input') %输入层设置
% lstmLayer(numhidden_units1,'Outputmode','sequence') %学习层设置(cell层)
lstmLayer(numhidden_units1,'Outputmode','sequence','name','hidden1') %隐藏层1
dropoutLayer(0.3,'name','dropout_1') %隐藏层1权重丢失率,防止过拟合
lstmLayer(numhidden_units2,'Outputmode','last','name','hidden2') %隐藏层2
dropoutLayer(0.3,'name','dropout_2') %隐藏层2权重丢失率,防止过拟合
fullyConnectedLayer(outputSize,'name','fullconnect') %全连接层设置(outputsize:预测值的特征维度)
regressionLayer('name','out')]; %回归层(因为负荷预测值为连续值,所以为回归层)
% trainoption
opts = trainingOptions('adam', ... %优化算法
'MaxEpochs',50, ... %遍历样本最大循环数
'GradientThreshold',1,... %梯度阈值
'ExecutionEnvironment','cpu',... %运算环境
'InitialLearnRate',0.001, ... %初始学习率
'LearnRateSchedule','piecewise', ... % 学习率计划
'LearnRateDropPeriod',2, ... %2个epoch后学习率更新
'LearnRateDropFactor',0.9, ... %学习率衰减速度
'MiniBatchSize',1,... % 批处理样本大小
'Verbose',0, ... %命令控制台是否打印训练过程
'Plots','training-progress'... % 打印训练进度
);
四、代码获取
后台私信回复“65期”可获得下载链接。