基于GRU门控循环网络的时间序列预测matlab仿真,对比LSTM网络

49 阅读3分钟

1.算法运行效果图预览

5a03792bfb8fc7eeec2afc7fee7f77d2_82780907_202310302257000610626622_Expires=1698678420&Signature=r74BjoWcCa1Xdv1XutzDZfo6DJ0%3D&domain=8.jpeg  

LSTM:

  913db70e4e75cffec40860e9be722d54_82780907_202310302257200282699612_Expires=1698678440&Signature=vXAeIVvutmbtDcvzisnjmV1mVqI%3D&domain=8.jpeg

39c33f9cf2fc602f93607da14c84394e_82780907_202310302257200329276619_Expires=1698678440&Signature=knrV3wNqyqFdiHKUUB1yYbHY7jE%3D&domain=8.jpeg

 

 

 

GRU

 

  92c8038f118792f9f0321214c1b35414_82780907_202310302259410422114948_Expires=1698678581&Signature=si6K62aaJ96b2XmSQApAY3z9Qec%3D&domain=8.jpeg

563d0e416edadaf731c7c5023f957c6a_82780907_202310302259410501658527_Expires=1698678581&Signature=bW7Me3rz44wPUZ4ua%2FeBV3HVB7c%3D&domain=8.jpeg 2.算法运行软件版本

matlab2022a

 

3.算法理论概述

        门控循环单元(Gated Recurrent Unit,简称GRU)是一种用于序列建模和预测的递归神经网络(RNN)变体。GRU通过引入门控机制,克服了传统RNN在处理长序列时的梯度消失问题,并在许多任务中取得了优异的性能。下面将详细介绍GRU的原理、数学公式以及其在时间序列预测中的应用。GRU是一种在长序列上具有较好表现的递归神经网络,通过门控机制有效地捕捉序列中的长距离依赖关系。与长短时记忆网络(LSTM)相比,GRU使用更少的门控单元,因此参数较少,更易于训练。

 

GRU的核心在于两个门控单元:重置门(Reset Gate)和更新门(Update Gate)。

 

重置门(r_trt​)用于控制是否将过去的信息纳入当前状态的计算中。

更新门(z_tzt​)用于控制过去状态和当前输入之间的权重。

GRU的状态更新公式如下:

 

6.png

7.png

8.png

 

 

      GRU在时间序列预测中具有广泛应用,它可以根据过去的观测值来预测未来的值。通过对序列数据进行训练,GRU可以学习到数据中的模式和趋势,并用于预测时间序列的下一个步骤。例如,在股票价格预测、天气预测、自然语言处理等领域中,GRU被用来捕捉序列数据中的关键信息,从而进行准确的预测。

 

        总结: GRU是一种门控循环神经网络,通过引入更新门和重置门的机制,有效地解决了传统RNN的梯度消失问题,能够捕捉序列数据中的长距离依赖关系。它在时间序列预测等任务中表现优异,为处理序列数据提供了强大的工具。

 

 

 

4.部分核心程序 `%构建GRU网络模型

layers = [ ...

    sequenceInputLayer(N_feature)

    gruLayer(N_hidden)

    fullyConnectedLayer(N_Rpes)

    regressionLayer

    ];

% 定义训练选项

options = trainingOptions('adam', ...

    'MaxEpochs',250, ...

    'GradientThreshold',1, ...

    'InitialLearnRate',0.005, ...

    'MiniBatchSize',50, ...

    'LearnRateSchedule','piecewise', ...

    'LearnRateDropPeriod',90, ...

    'LearnRateDropFactor',0.2, ...

    'Verbose',false, ...

    'Plots','training-progress');   

 

 

% 初始化RMSE、MAE和MAPE

Rmse2 = [];

Mae2  = [];

Mape2 = [];

 

 

XTestIp          = TT(1:Num_dats+1);

% 训练GRU网络模型

net              = trainNetwork([XTrainIp(1:end-1);XTestIp(1:end-1)],XTestIp(2:end),layers,options);

% 使用训练好的模型进行预测

[net,YPred]      = predictAndUpdateState(net,[XTrainIp(end);XTestIp(end)]);

numTimeStepsTest = numel(YTestIp);

for i = 2:numTimeStepsTest                                               

    [net,YPred(:,i)] = predictAndUpdateState(net,[YTrainIp(i-1);YPred(:,i-1)],'ExecutionEnvironment','cpu');

end                                                                       

% 对预测结果进行反归一化

YPred   = (Vmax2-Vmin2)*YPred + Vmin2;                                            

YTest   = YTestIp(1:end);

YTest   = (Vmax2-Vmin2)*YTest + Vmin2;          

% 计算RMSE、MAE和MAPE

Rmse2   = (sqrt(mean((YPred-YTest).^2)))*100/(max(YTest))

Mae2    = mean(abs(YPred-YTest))

Mape2   = mean(abs((YPred(YTest~=0)-YTest(YTest~=0)))./YTest(YTest~=0))*100        

% 计算MAPE绝对误差

mape1   =((YPred(YTest~=0)-YTest(YTest~=0))./YTest(YTest~=0));

% 反归一化测试集输入数据

XTestIp = (Vmax2-Vmin2)*XTestIp + Vmin2;`