区间预测

编程入门 行业动态 更新时间:2024-10-18 18:29:09

<a href=https://www.elefans.com/category/jswz/34/1766384.html style=区间预测"/>

区间预测

区间预测 | 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版权协议,转载请附上原文出处链接及本声明。
原文链接:
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版权协议,转载请附上原文出处链接及本声明。
原文链接:

参考资料

[1]
[2]
[3]

更多推荐

区间预测

本文发布于:2024-03-10 13:34:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1728114.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:区间

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!