多维时序 | MATLAB实现GRU多变量时间序列预测
效果一览
基本介绍
本次运行测试环境MATLAB2020b,MATLAB实现GRU多变量时间序列预测,门控循环单元。GRU(Gate Recurrent Unit)是循环神经网络(Recurrent Neural Network, RNN)的一种。和LSTM(Long-Short Term Memory)一样,也是为了解决长期记忆和反向传播中的梯度等问题而提出来的。实际中很多序列的变化规律都会受到其他序列的影响,比如在研究居民的人均消费序列时,由于消费会受收入的影响,如果能把收入也纳入研究范围,就能得到更精确的消费模型,这就涉及多元时间序列分析。
程序设计
- 完整程序私信博主。
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
%% define the Deeper GRU networks
numFeatures= 1;%输入节点
numResponses = 1;%输出节点
numHiddenUnits = 500;%隐含层神经元节点数
%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
%构建GRU网络
layers = [sequenceInputLayer(numFeatures)
gruLayer(numHiddenUnits) %GRU函数
dropoutLayer(0.2)%丢弃层概率
reluLayer('name','relu')% 激励函数 RELU
fullyConnectedLayer(numResponses)
regressionLayer];
%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
XTrain=XTrain';
YTrain=YTrain';
%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
%% GRU结构参数
options = trainingOptions('adam', ... % adam优化算法 自适应学习率
'MaxEpochs',500,...% 最大迭代次数
'MiniBatchSize',5, ...%最小批处理数量
'GradientThreshold',1, ...%防止梯度爆炸
'InitialLearnRate',0.005, ...% 初始学习率
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ...%125次后 ,学习率下降
'LearnRateDropFactor',0.2, ...%下降因子 0.2
'ValidationData',{XTrain,YTrain}, ...
'ValidationFrequency',5, ...%每五步验证一次
'Verbose',1, ...
'Plots','training-progress');
%% 训练GRU网络
net = trainNetwork(XTrain,YTrain,layers,options);
%% 测试样本标准化处理
dataTestStandardized = (data_Test - mu) / sig;
XTest = dataTestStandardized(1:end-1,:)%测试输入
YTest = data_Test(2:end,:);%测试输出
————————————————
版权声明:本文为CSDN博主「机器学习之心」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
参考资料
[1] https://blog.csdn.net/kjm13182345320/category_10914353.html?spm=1001.2014.3001.5482
[2] https://blog.csdn.net/kjm13182345320/article/details/127601808