【MATLAB第13期】基于LSTM长短期记忆网络的多输入单输出滑动窗口回归预测模型
一、实现效果
往期文章提到了对单列时间序列数据进行滑动窗口处理的思路,本文介绍如何对多输入单输出数据进行滑动窗口的思路。实现效果如下:
训练过程
测试集拟合效果
二、数据设置:
198行(代表198天),21列数据,其中前20列为变量,第21列为因变量。
前80%数据训练,后20%数据测试
三、滑动窗口处理:
滑动窗口尺寸为7,即可认为前7天的变量作为输入,第7天的因变量作为输出。
则输入的一组样本矩阵结构由20×1变成 20×7而样本数量也从原来的198变为192 ,因为前6组变量数据作为了历史样本
输入数据样本 20198
转变后 19220*7
四、评价指标:
RMSE = 1.1891
MAPE = 0.05319
五、部分代码:
%% LSTM 多变量单输入滑动窗口处理 clear all; clc; close all; load data % 数据处理 % 归一化(全部特征 均归一化) output_data =data(:,end); input_data =data(:,1:end-1); [input_normdata,input_normopt] =mapminmax(input_data',0,1); [output_normdata,output_normopt] = mapminmax(output_data',0,1); k =7; %滑动窗口处理 % 划分数据集 n = floor(0.8*size(input_normdatacell,1));%训练集,测试集样本数目划分 % LSTM 层设置,参数设置 numhidden_units1=100; % lstm layers = [ ... sequenceInputLayer(inputSize,'name','input') %输入层设置 lstmLayer(numhidden_units1) %学习层设置 fullyConnectedLayer(outputSize,'name','fullconnect') %全连接层设置(outputsize:预测值的特征维度) regressionLayer('name','out')]; %回归层 % trainoption opts = trainingOptions('adam', ... %优化算法 'MaxEpochs',10, ... %遍历样本最大循环数 'GradientThreshold',1,... %梯度阈值 'ExecutionEnvironment','cpu',... %运算环境 'InitialLearnRate',0.001, ... %初始学习率 'Plots','training-progress'... % 打印训练进度 ); % 网络训练 tic net = trainNetwork(input_xtraincell,output_ytraincell,layers,opts); %网络训练 % 预测 %预测天数 yprenorm = net.predict(input_xtestcell); %预测 ypre = mapminmax('reverse',yprenorm',output_normopt); %预测值反归一化 yytest = mapminmax('reverse',output_ytestcell',output_normopt); RMSE = sqrt(mean((ypre-yytest).^2)); MAPE = mean((ypre-yytest)./yytest); disp(["RMSE2 ",RMSE ]) disp(["MAPE2 ", MAPE])
六、获取方式:
后台回复‘回归滑动窗口’,即可获取下载链接。