区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测

目录

区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料

效果一览

进阶版 基础版

基本介绍

MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测 QRBiGRU双向门控循环单元分位数回归是一种深度学习模型,常用于时间序列的预测。该模型结合了门控循环单元(GRU)和分位数回归(Quantile Regression),可以在预测中提供对序列数据不同分位数的估计,从而提高预测的准确性。 在时间序列的区间预测中,QRBiGRU可以根据历史数据来预测未来一段时间内的数值范围。具体来说,该模型通过学习历史数据中的模式和趋势,来预测未来数据在一定置信水平下的上限和下限。因此,该模型在金融、天气预报、交通等领域中得到了广泛应用。 需要注意的是,QRBiGRU模型的训练和应用需要大量的数据和计算资源。在使用该模型进行时间序列的区间预测时,需要选择合适的分位数和参数,同时要进行模型的调优和验证,以确保模型具有良好的预测效果和稳定性。

模型描述

分位数回归是简单的回归,就像普通的最小二乘法一样,但不是最小化平方误差的总和,而是最小化从所选分位数切点产生的绝对误差之和。如果 q=0.50(中位数),那么分位数回归会出现一个特殊情况 - 最小绝对误差(因为中位数是中心分位数)。我们可以通过调整超参数 q,选择一个适合平衡特定于需要解决问题的误报和漏报的阈值。GRU 有两个有两个门,即一个重置门(reset gate)和一个更新门(update gate)。从直观上来说,重置门决定了如何将新的输入信息与前面的记忆相结合,更新门定义了前面记忆保存到当前时间步的量。如果我们将重置门设置为 1,更新门设置为 0,那么我们将再次获得标准 RNN 模型。

1.Matlab实现基于QRBiGRU分位数回归双向门控循环单元的时间序列区间预测模型; 2.多图输出、多指标输出(MAE、RMSE、MSE、R2),多输入单输出,含不同置信区间图、概率密度图; 3.data为数据集,功率数据集,用过去一段时间的变量,预测目标,目标为最后一列,也可适用于负荷预测、风速预测;MainQRGRUTS为主程序,其余为函数文件,无需运行;

程序设计

基础版完整程序和数据获取方式(基础版为单向GRU),订阅《GRU门控循环单元》(数据订阅后私信我获取):MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测进阶版完整程序和数据获取方式:私信博主。

%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

%构建网络

layers = [sequenceInputLayer(numFeatures)

dropoutLayer(0.2)%丢弃层概率

reluLayer('name','relu')% 激励函数 RELU

fullyConnectedLayer(numResponses)

regressionLayer];

%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

XTrain=XTrain';

YTrain=YTrain';

%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

%% 结构参数

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');

%% 训练网络

net = trainNetwork(XTrain,YTrain,layers,options);

%% 测试样本标准化处理

dataTestStandardized = (data_Test - mu) / sig;

XTest = dataTestStandardized(1:end-1,:)%测试输入

YTest = data_Test(2:end,:);%测试输出

%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

XTest=XTest';

————————————————

版权声明:本文为CSDN博主「机器学习之心」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/kjm13182345320/article/details/126805601

layers = [ ...

sequenceInputLayer(inputSize,'name','input') %输入层设置

dropoutLayer(0.3,'name','dropout_1')

gruLayer(numhidden_units2,'Outputmode','last','name','hidden2')

dropoutLayer(0.3,'name','drdiopout_2')

fullyConnectedLayer(outputSize,'name','fullconnect') % 全连接层设置(影响输出维度)(cell层出来的输出层) %

quanRegressionLayer('out',i)];

%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

% 参数设定

opts = trainingOptions('adam', ...

'MaxEpochs',10, ...

'GradientThreshold',1,...

'ExecutionEnvironment','cpu',...

'InitialLearnRate',0.001, ...

'LearnRateSchedule','piecewise', ...

'LearnRateDropPeriod',2, ... %2个epoch后学习率更新

'LearnRateDropFactor',0.5, ...

'Shuffle','once',... % 时间序列长度

'SequenceLength',1,...

'MiniBatchSize',24,...

'Verbose',0);

%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

%

% 网络训练

%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

y = Test.demand;

x = Test{:,3:end};

%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

% 归一化

[xnorm,xopt] = mapminmax(x',0,1);

xnorm = mat2cell(xnorm,size(xnorm,1),ones(1,size(xnorm,2)));

[ynorm,yopt] = mapminmax(y',0,1);

ynorm = ynorm';

% 平滑层

flattenLayer('Name','flatten')

% 特征学习

dropoutLayer(0.25,'Name','drop3')

% 全连接层

fullyConnectedLayer(numResponses,'Name','fc')

regressionLayer('Name','output') ];

layers = layerGraph(layers);

layers = connectLayers(layers,'fold/miniBatchSize','unfold/miniBatchSize');

————————————————

版权声明:本文为CSDN博主「机器学习之心」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/kjm13182345320/article/details/130447132

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/127931217 [2] https://blog.csdn.net/kjm13182345320/article/details/127418340 [3] https://blog.csdn.net/kjm13182345320/article/details/127380096

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。