区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测


目录

  • 区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测
  • 效果一览
  • 基本介绍
  • 模型描述
  • 程序设计
  • 参考资料


效果一览

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_卷积神经网络


区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_分位数回归_02


区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_区间预测_03

基本介绍

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测
1.Matlab实现基于QRCNN分位数回归卷积神经网络的时间序列区间预测模型;
2.多图输出、多指标输出(MAE、RMSE、MSE、R2),多输入单输出,含不同置信区间图、概率密度图;
3.data为数据集,功率数据集,用过去一段时间的变量,预测目标,目标为最后一列,也可适用于负荷预测、风速预测;MainQRCNNTS为主程序,其余为函数文件,无需运行;
4.代码质量高,注释清楚,含数据预处理部分,处理缺失值,如果为nan,用上一行替代,也含核密度估计。

模型描述

QRCNN是一种基于卷积神经网络(CNN)的分位数回归模型,用于时间序列区间预测。其全称为Quantile Regression Convolutional Neural Network。该模型可以用于预测时间序列数据的不同分位数,例如预测股票价格的上下限、风速的极值等。由于QRCNN采用卷积神经网络的结构,可以有效地捕捉时间序列数据的局部和全局特征,从而提高预测准确性。
QRCNN模型的主要思想是将时间序列数据分解成一系列窗口,并将每个窗口视为一个图像。然后,使用卷积神经网络对这些图像进行特征提取和分析,最终输出每个分位数的预测结果。QRCNN模型的训练过程采用分位数损失函数,以最小化所有分位数的预测误差。

QRCNN模型的优点包括:
能够有效地处理时间序列数据的不确定性和非线性特征;
能够同时预测多个分位数,从而提供更全面的预测结果;
可以灵活地处理不同长度的时间序列数据。
总之,QRCNN模型是一种用于时间序列区间预测的强大工具,可以帮助人们更好地理解和应用时间序列数据。
QRCNN模型的公式包括输入层、卷积层、池化层、全连接层和输出层。以下是QRCNN模型的主要公式:

输入层:
假设时间序列数据为区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_04,则输入层将每个时间步区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_卷积神经网络_05的数据作为一个输入节点区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_04
卷积层:
假设第区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_区间预测_07个卷积核的大小为区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_08,则第区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_区间预测_07个卷积层的输出区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_分位数回归_10可以表示为:

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_11

其中,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_卷积神经网络_12是第区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_区间预测_07个卷积核的权重矩阵,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_14表示卷积操作,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_15是偏置项,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_QRCNN_16是激活函数,通常使用ReLU或tanh函数。
池化层:
假设第区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_区间预测_07个池化操作的大小为区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_18,则第区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_区间预测_07个池化层的输出区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_卷积神经网络_20可以表示为:

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_区间预测_21

其中,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_22表示最大池化操作。
全连接层:
假设第区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_23个全连接层的输出为区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_QRCNN_24,则第区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_23个全连接层的输出区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_QRCNN_24可以表示为:

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_27

其中,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_分位数回归_28是第区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_23个全连接层的权重矩阵,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_卷积神经网络_30是偏置项,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_QRCNN_16是激活函数。
输出层:
假设要预测区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_32个分位数,第区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_时间序列区间预测_32个分位数为区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_分位数回归_34,则输出层的输出区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_分位数回归_35可以表示为:

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_卷积神经网络_36

其中,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_QRCNN_37表示第区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_分位数回归_38层的输出区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_区间预测_39在分位数区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_分位数回归_34处的累积分布函数(CDF)。
损失函数:
QRCNN模型采用分位数损失函数,定义为:

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_卷积神经网络_41

其中,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_区间预测_42表示实际值,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_区间预测_43表示预测值,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_QRCNN_44表示分位数,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_QRCNN_45表示指示函数。
最终,QRCNN模型的目标是最小化所有分位数的预测误差的总和,即:

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_QRCNN_46

其中,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_分位数回归_47表示样本数量,区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测_QRCNN_48表示分位数个数。

程序设计

  • 完整程序和数据获取方式:私信博主。
% Divide the data into training and validation data sets
numTrainFiles = 90;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize');
% Define the convolutional neural network architecture.
layers = [
% Image Input Layer An imageInputLayer 
    imageInputLayer([64 64 1])
% Convolutional Layer 
convolution2dLayer(3,8,'Padding','same')
% Batch Normalization 
    batchNormalizationLayer
% ReLU Layer The batch
    reluLayer
% Max Pooling Layer  
    % More values means less weights
    maxPooling2dLayer(4,'Stride',4)
    %------------------------------
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer(5,'Stride',5)
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer
% Fully Connected Layer (Number of Classes) 
    fullyConnectedLayer(8)
% Softmax Layer 
    softmaxLayer
% Classification Layer The final layer 
    classificationLayer];
% Specify the training options
options = trainingOptions('sgdm', ...
    'InitialLearnRate',0.001, ...
    'MaxEpochs',20, ...
    'Shuffle','every-epoch', ...
    'ValidationData',imdsValidation, ...
    'ValidationFrequency',8, ...
    'Verbose',false, ...
    'Plots','training-progress');
% Train the network 
[net,info]= trainNetwork(imdsTrain,layers,options);

% Converting Serial Network to an Object
netobj = net.saveobj;
% Extracting Fully Connected Layer's Weights To Evolve
FullConn=netobj.Layers(13, 1).Weights;
netbias=netobj.Layers(13, 1).Bias;

%% Data for Each Weight
sizefinal=size(FullConn);
sizefinal=sizefinal(1,1);
for i=1:sizefinal
Inputs=FullConn(i,:);
Targets=Inputs;
data.Inputs=Inputs;
data.Targets=Targets;
datam{i}=JustLoad(data);
end;