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为主程序,其余为函数文件,无需运行;
%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
%构建网络
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