【MATLAB第68期】基于MATLAB的LSTM长短期记忆网络多变量时间序列数据多步预测含预测未来(非单步预测)

【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 由5
5 变换为 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.020.030.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期”可获取下载链接。

猜你喜欢

转载自blog.csdn.net/qq_29736627/article/details/132175880