回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测

目录

    • [回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测](#回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测)

预测效果

基本介绍

CNN-BiGRU-Attention,即卷积神经网络(CNN)结合双向门控循环单元(BiGRU)并融合注意力机制(Attention)的多输入单输出回归预测模型,是一种强大的深度学习架构,特别适用于处理序列数据。以下是对该模型的详细解析:

一、模型组成

卷积神经网络(CNN)

功能:用于提取输入序列的局部特征。

工作方式:通过滑动窗口的方式,将输入序列分成多个子序列,并使用卷积操作提取每个子序列的特征。这些特征可以捕捉到输入序列中的局部模式和结构信息。

双向门控循环单元(BiGRU)

功能:用于捕捉输入序列的上下文信息。

组成:由两个方向的门控循环单元组成,分别从前向和后向对输入序列进行处理。这样可以同时考虑到过去和未来的信息,更好地理解序列中的依赖关系。

特点:具有重置门和更新门,分别有助于捕获序列中的短期和长期依赖关系。

注意力机制(Attention)

功能:增强模型对输入序列的关注度,使模型能够更加关注重要的信息。

工作方式:通过计算输入序列中每个位置的权重,然后将这些权重与对应位置的特征进行加权求和,得到最终的上下文向量。这个上下文向量会被传递给下一个阶段的模型进行进一步处理。

二、模型优势

特征提取能力:CNN能够提取输入序列的局部特征,这些特征对于理解序列数据的结构和模式至关重要。

上下文捕捉能力:BiGRU能够同时处理前向和后向的序列信息,从而捕捉到更全面的上下文信息。

注意力引导:注意力机制使模型能够动态地调整对不同位置信息的重视程度,从而更加准确地捕捉到关键信息。

三、应用场景

CNN-BiGRU-Attention模型适用于各种需要处理序列数据的回归预测任务,如时间序列预测、金融预测、气象预测等。

程序设计

clike 复制代码
%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc  

%% 导入数据
data =  readmatrix('day.csv');
data = data(:,3:16);
res=data(randperm(size(data,1)),:);    %此行代码用于打乱原始样本,使训练集测试集随机被抽取,有助于更新预测结果。
num_samples = size(res,1);   %样本个数


% 训练集和测试集划分
outdim = 1;                                  % 最后一列为输出
num_size = 0.7;                              % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim;                  % 输入特征维度


P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);

P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);

%  数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);

[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);

%  格式转换
for i = 1 : M 
    vp_train{i, 1} = p_train(:, i);
    vt_train{i, 1} = t_train(:, i);
end

for i = 1 : N 
    vp_test{i, 1} = p_test(:, i);
    vt_test{i, 1} = t_test(:, i);
end
numFeatures = size(p_train,1);

lgraph = layerGraph();

% 添加层分支



%%  参数设置
options = trainingOptions('adam', ...                 % 优化算法Adam
    'MaxEpochs', 150, ...                            % 最大训练次数
    'GradientThreshold', 1, ...                       % 梯度阈值
    'InitialLearnRate', 0.01, ...         % 初始学习率
    'LearnRateSchedule', 'piecewise', ...             % 学习率调整
    'LearnRateDropPeriod', 60, ...                   % 训练850次后开始调整学习率
    'LearnRateDropFactor',0.1, ...                    % 学习率调整因子
    'L2Regularization', 0.001, ...         % 正则化参数
    'ExecutionEnvironment', 'cpu',...                 % 训练环境
    'Verbose', 1, ...                                 % 关闭优化过程
    'Plots', 'none');                    % 画出曲线

%  训练
tic
net = trainNetwork(vp_train, vt_train, lgraph, options);
toc
%analyzeNetwork(net);% 查看网络结构
%  预测
t_sim1 = predict(net, vp_train); 
t_sim2 = predict(net, vp_test); 

%  数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
T_train1 = T_train;
T_test2 = T_test;

参考资料

1\] https://blog.csdn.net/kjm13182345320/article/details/128267322?spm=1001.2014.3001.5501 \[2\] https://blog.csdn.net/kjm13182345320/article/details/128234920?spm=1001.2014.3001.5501

相关推荐
2zcode11 小时前
基于MATLAB元胞自动机(CA)的AZ80A镁合金动态再结晶(DRX)过程模拟
开发语言·matlab·动态再结晶
jiushiapwojdap12 小时前
LU分解法求解线性方程组Matlab实现
数据结构·其他·算法·matlab
MATLAB代码顾问14 小时前
改进遗传算法(IGA)求解作业车间调度问题(JSSP)——附MATLAB代码
开发语言·matlab
米饭不加菜14 小时前
机器人矩阵运算MATLAB计算
matlab·矩阵·机器人
机器学习之心15 小时前
多智能体遗传算法(MAGA)优化最优投影方向的投影寻踪聚类评价,MATLAB代码
matlab·聚类·投影寻踪聚类评价
MATLAB代码顾问15 小时前
多种群协同进化算法(MPCE)求解大规模作业车间调度问题——附MATLAB代码
开发语言·算法·matlab
Evand J17 小时前
【MATLAB绘图教程】空间误差场图的概念及其应用,附代码
matlab·平面·绘图·定位
alphageek817 小时前
Matlab linspace函数完全指南:从基础用法到进阶技巧
开发语言·其他·matlab
xrgs_shz17 小时前
MATLAB 纹理特征提取:一文读懂 graycomatrix 与 graycoprops
人工智能·计算机视觉·matlab
江南十四行18 小时前
CNN进阶:Batch Normalization与Layer Normalization对比 + 网络结构设计与PyTorch实现
pytorch·cnn·batch