区间预测 | MATLAB实现基于QRCNN-GRU-Multihead-Attention多头注意力卷积门控循环单元多变量时间序列区间预测
目录
- 区间预测 | MATLAB实现基于QRCNN-GRU-Multihead-Attention多头注意力卷积门控循环单元多变量时间序列区间预测
- 效果一览
- 基本介绍
- 模型描述
- 程序设计
- 参考资料
效果一览
基本介绍
1.Matlab实现基于QRCNN-GRU-Multihead-Attention卷积神经网络结合门控循环单元多头注意力多变量时间序列区间预测;
2.多图输出、点预测多指标输出(MAE、MAPE、RMSE、MSE、R2),区间预测多指比输出(区间覆盖率PICP、区间平均宽度百分比PINAW),多输入单输出,含点预测图、不同置信区间预测图、误差分析图、核密度估计概率密度图;
3.data为数据集,功率数据集,用多个关联变量,预测最后一列功率数据,也可适用于负荷预测、风速预测;MainQRCNN_GRU_MATTNTS为主程序,其余为函数文件,无需运行;
4.代码质量高,注释清楚,含数据预处理部分,处理缺失值,如果为nan,则删除,也含核密度估计;
5.运行环境Matlab2021及以上。
模型描述
多头注意力卷积门控循环单元是一种用于多变量时间序列区间预测的深度学习模型,它结合了多头注意力机制、卷积神经网络和门控循环单元。
该模型的具体原理如下:
数据预处理:对于多变量时间序列数据,首先需要对其进行预处理,包括归一化、填充缺失值等操作,以便于后续的模型训练和预测。
特征提取:使用卷积神经网络(CNN)对每个变量的时间序列数据进行特征提取,提取出每个时间步的特征向量。
多头注意力:对于每个时间步的特征向量,使用多头注意力机制来选择每个变量的重要特征,以此来生成加权平均的特征向量。
门控循环单元:使用门控循环单元(GRU)来建模时间序列之间的关系,以及变量之间的依赖关系。GRU是一种循环神经网络,它具有门控机制,可以控制信息的流动。
输出:最后,将GRU的输出与注意力加权的特征向量进行拼接,得到模型的最终输出。该输出可以用于多变量时间序列的区间预测,例如预测未来一段时间内的变量值。
整个模型的训练过程是一个端到端的过程,使用反向传播算法来优化模型参数。在预测过程中,可以将历史数据作为输入,得到模型的输出,从而进行区间预测。
程序设计
- 完整程序和数据获取方式:私信博主。
ntrain=round(nwhole*num_size);
ntest =nwhole-ntrain;
% 准备输入和输出训练数据
input_train =input(:,temp(1:ntrain));
output_train=output(:,temp(1:ntrain));
% 准备测试数据
input_test =input(:, temp(ntrain+1:ntrain+ntest));
output_test=output(:,temp(ntrain+1:ntrain+ntest));
%% 数据归一化
method=@mapminmax;
[inputn_train,inputps]=method(input_train);
inputn_test=method('apply',input_test,inputps);
[outputn_train,outputps]=method(output_train);
outputn_test=method('apply',output_test,outputps);
% 创建元胞或向量,长度为训练集大小;
XrTrain = cell(size(inputn_train,2),1);
YrTrain = zeros(size(outputn_train,2),1);
for i=1:size(inputn_train,2)
XrTrain{i,1} = inputn_train(:,i);
YrTrain(i,1) = outputn_train(:,i);
end
% 创建元胞或向量,长度为测试集大小;
XrTest = cell(size(inputn_test,2),1);
YrTest = zeros(size(outputn_test,2),1);
for i=1:size(input_test,2)
XrTest{i,1} = inputn_test(:,i);
YrTest(i,1) = outputn_test(:,i);
end
%% 创建混合网络架构
%% 区间覆盖率
RangeForm = [T_sim(:, 1), T_sim(:, end)];
Num = 0;
for i = 1 : length(T_train)
Num = Num + (T_train(i) >= RangeForm(i, 1) && T_train(i) <= RangeForm(i, 2));
end
picp = Num / length(T_train);
S = cumtrapz(X,Y);
Index = find(abs(m-S)<=1e-2);
Q = X(max(Index));
参考资料
[1] https://blog.csdn.net/kjm13182345320/article/details/127931217
[2] https://blog.csdn.net/kjm13182345320/article/details/127418340