回归预测 | 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

相关推荐
白杆杆红伞伞2 小时前
02_线性模型(回归分类模型)
分类·数据挖掘·回归
翱翔-蓝天9 小时前
MATLAB 在医疗行业的应用
开发语言·matlab
hie9889418 小时前
matlab稳定求解高精度二维对流扩散方程
算法·机器学习·matlab
买了一束花18 小时前
MATLAB导出和导入Excel文件表格数据并处理
人工智能·算法·matlab
是代码侠呀21 小时前
飞蛾扑火算法matlab实现
开发语言·算法·matlab·github·github star·github 加星
phoenix@Capricornus1 天前
MATLAB Deep Learning Toolbox
人工智能·深度学习·matlab
慕婉03071 天前
如何理解编程中的递归、迭代与回归?
人工智能·数据挖掘·回归
passionSnail1 天前
《用MATLAB玩转游戏开发》Flappy Bird:小鸟飞行大战MATLAB趣味实现
开发语言·matlab
Code_流苏1 天前
《Python星球日记》 第54天:卷积神经网络进阶
python·cnn·数据增强·图像分类·alexnet·lenet-5·vgg
yt948322 天前
Matlab实现绘制任意自由曲线
开发语言·matlab