【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期”可获取下载链接。








![[CVPR-23-Highlight] Magic3D: High-Resolution Text-to-3D Content Creation](https://img-blog.csdnimg.cn/cb4c2653d55d4eeca6ef5b34afaf5040.png)










