【MATLAB第68期】基于MATLAB的LSTM长短期记忆网络多变量时间序列数据多步预测含预测未来(非单步预测)
输入前25个时间,输出后5个时间
一、数据转换
1、原始数据
5列时间序列数据,70行样本
70×5 数据矩阵结构
2、数据转换
将总数据data划分成141cell,且每行为55的数据
14行中,每行代表5个变量的5天数据。
多步预测:根据前25天数据预测后5天数据
即51cell 预测 11cell
如:1~5行cell 预测第6行(1-25天,预测26-30天)
2~6行cell 预测第7行(6-30天,预测31-35天)
······
9-13行cell 预测第14行(41-65天,预测66-70天)
其次,将data_y弄成525,与data_x序列长度一致
data_add(n,1) ={zeros(5,20)};,增添零值
即将data_y 由55 变换为 5*25
二、参数设置
%% LSTM网络训练
inputsize =5;
outputsize =5;
layers=[sequenceInputLayer(inputsize);
bilstmLayer(200);
dropoutLayer(0.2);
fullyConnectedLayer(outputsize);
regressionLayer();
];
opts = trainingOptions('adam', ...
'MaxEpochs',2000, ...
'GradientThreshold',1,...
'ExecutionEnvironment','cpu',...
'InitialLearnRate',0.005, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ... %2个epoch后学习率更新
'LearnRateDropFactor',0.2, ...
'Shuffle','once',... % 时间序列长度
'L2Regularization',0.005,...%正则项系数初始值。建议一开始将正则项系数λ设置为0,先确定一个比较好的learning rate。然后固定该learning rate,给λ一个值(比如1.0),然后根据validation accuracy,将λ增大或者减小10倍(增减10倍是粗调节,当你确定了λ的合适的数量级后,比如λ = 0.01,再进一步地细调节,比如调节为0.02,0.03,0.009之类。
'SequenceLength',25,...
'MiniBatchSize',10,...%比如mini-batch size设为100,则权重更新的规则为:%也就是将100个样本的梯度求均值,替代online learning方法中单个样本的梯度值
'Verbose',1,...
'Plots','training-progress');
三、预测
1、测试集效果
输入data_x最后一行数据 ,即41-65天
输出 [1-20构造数据]+ 66-70天数据
筛选后5天数据 。
2、预测未来
若需要预测未来5天 P1(71-75),则只需要输入
第46-70天 5个变量数据
就会得到 [1*20构造数据]+第71-75天数据
若需要预测未来10天 P2(76-80),则只需要输入
第51-75天 (71-75天数据由P1提供)5个变量数据
就会得到 [1*20构造数据]+第76-80天数据
若需要预测未来15天 P3(81-85),则只需要输入
第56-80天 (76-80天数据由P2提供)5个变量数据
就会得到 [1*20构造数据]+第81-85天数据
四、代码获取
后台私信回复“第68期”可获取下载链接。