代码原理
1.循环神经网络
循环神经网络(Recurrent Neural Network, RNN) 是深度学习领域一类具有内部自连接的神经网络能够学习复杂的矢量到矢量的映射。一个简单的循环神经网络结构,其结构包含三部分,分别为输入层、隐藏层和输出层,如图1所示。
图1 循环神经网络结构
RNN虽然能够处理时间序列数据,但是大量的实践也表明,标准的RNN往往很难实现信息的长期保存。
2 .长短期记忆神经网络
1997 年Hochreiter 等[75]提出长短期记忆 (Long-Short Time Memory,LSTM)网络,该网络特别适用于处理前后存在关联的超长数据序列,例如长期实测温度序列和长期实测位移序列等。LSTM神经网络包含输入层、LSTM层(隐含层)和输出层,其神经网络的结构如图2所示。
图2 LSTM神经网络结构
LSTM层作为神经网络结构的核心,由多个LSTM单元串联而成,如图2所示,每个LSTM单元包含三个关键功能模块:遗忘门、更新门和输出门。LSTM单元的计算过程如式(1)至式(6)所示。
3 .双向长短期记忆神经网络
LSTM网络虽然能防止RNN网络的梯度消失或者爆炸情况的出现,但是神经网络训练中,LSTM网络的单向传播结构限制了对时序数据的充分利用。为了克服这一限制,有学者对 LSTM 神经网络的结构进行了改进,并提出了双向长短时记忆(Bi-directional Long Short-Term Memory, BiLSTM)神经网络[76]以同时考虑当前时刻前后输入对当前输出的影响。Bi-LSTM不仅继承了LSTM对时序特征数据处理的优势,同时具备更强的鲁棒性和泛化能力。相较于传统的单向LSTM,BiLSTM的双向结构能够有效地提高数据利用率,弥补了传统LSTM在处理时序数据时的局限性。因此,在时序数据处理领域,BiLSTM通常表现更为高效和智能,其网络结构如图3所示。
图3 BiLSTM神经网络结构
综上所述, BiLSTM网络通过双向的LSTM结构和时间流向的双向性质,进一步整合了未来数据信息。这种双向结构不仅充分发挥了LSTM在时序建模方面的优势,同时也弥补了单向LSTM无法利用上下文信息的不足。
3 .双向长短期记忆神经网络(Bi-LSTM)的数据回归预测简单步骤
基于双向长短时记忆神经网络(Bi-LSTM)的数据回归预测是一种常见的机器学习方法,特别适用于处理时间序列数据或具有时间依赖性的数据预测任务。Bi-LSTM结合了LSTM(长短时记忆网络)的能力,能够捕捉时间序列中复杂的长期依赖关系。在数据回归预测中,Bi-LSTM的工作原理通常如下:
双向结构:Bi-LSTM包含两个方向的LSTM网络,分别沿时间序列正向和反向进行处理。这使得网络可以同时从过去和未来的信息中学习,更全面地理解时间序列的模式。
特征提取与学习:Bi-LSTM通过学习输入数据中的特征和模式,自动提取与预测任务相关的重要特征。LSTM单元内部的门控机制有助于处理和记忆长期依赖性,使得网络能够有效地处理时间序列中的数据。
回归预测:通过在训练过程中优化模型参数,Bi-LSTM可以预测时间序列中下一个时间步的数值,或者进行更长期的预测。这使得它在股票市场预测、天气预报、销售预测等领域中有广泛的应用。
调优与应用:在实际应用中,调整Bi-LSTM的网络结构、超参数和训练策略对预测性能至关重要。通常需要通过交叉验证和调参技术来优化模型,以达到最佳的预测效果。
部分代码
%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc
%% 导入数据
data = readmatrix('回归数据集.xlsx');
data = data(:,1:14);
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
% 创建BiLSTM网络,
layers = [ ...
sequenceInputLayer(f_) % 输入层
bilstmLayer(35)
reluLayer
fullyConnectedLayer(outdim) % 回归层
regressionLayer];
代码效果图
获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复数据回归预测本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。