该代码实现了一个基于双向GRU(BiGRU)与自注意力机制(Self-Attention)的回归预测模型,用于对时间序列或结构化数据进行预测。以下是代码的详细分析:
一、主要功能
使用双向GRU + 自注意力机制构建深度学习模型,对输入数据进行回归预测,评估其在训练集和测试集上的性能,并可视化预测结果。
二、逻辑关联
- 数据准备:导入数据、划分训练集与测试集、归一化处理、数据平铺与格式转换。
- 模型构建:使用双向GRU提取正向与反向序列特征,引入自注意力机制增强关键信息捕捉能力。
- 模型训练:使用Adam优化器进行训练,支持学习率衰减和批量训练。
- 预测与评估:对训练集和测试集进行预测,反归一化后计算多种评估指标(R²、RMSE、MAE、MAPE、MBE、MSE)。
- 结果可视化:绘制预测对比图、线性拟合图、误差分析图。
三、算法步骤
- 导入数据并随机打乱;
- 按比例划分训练集和测试集;
- 数据归一化(mapminmax);
- 数据平铺与格式转换(适用于序列输入);
- 构建包含双向GRU和自注意力层的网络;
- 设置训练选项并训练网络;
- 进行预测并反归一化;
- 计算评估指标并可视化结果。
四、技术路线
- 深度学习框架:MATLAB Deep Learning Toolbox
- 网络结构:BiGRU + Self-Attention + Fully Connected
- 优化算法:Adam with piecewise learning rate decay
- 评估指标:R², RMSE, MAE, MAPE, MBE, MSE
- 可视化:预测曲线、拟合散点图、误差分析图
五、公式原理
1. GRU 单元公式(门控循环单元)
[
\begin{aligned}
z_t &= \sigma(W_z \cdot [h_{t-1}, x_t]) \
r_t &= \sigma(W_r \cdot [h_{t-1}, x_t]) \
\tilde{h}t &= \tanh(W \cdot [r_t \odot h{t-1}, x_t]) \
h_t &= (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t
\end{aligned}
]
2. 自注意力机制(Self-Attention)
[
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
]
其中 ( Q, K, V ) 分别由输入序列通过线性变换得到。
3. 评估指标公式(以RMSE为例)
[
\text{RMSE} = \sqrt{\frac{1}{N} \sum_{i=1}^{N} (y_i - \hat{y}_i)^2}
]
六、参数设定
参数名 | 取值 | 说明 |
---|---|---|
num_size |
0.7 | 训练集比例 |
outdim |
1 | 输出维度 |
numHiddenUnits |
40 | GRU隐藏单元数 |
MiniBatchSize |
30 | 批大小 |
MaxEpochs |
800 | 最大训练轮数 |
InitialLearnRate |
0.01 | 初始学习率 |
LearnRateDropFactor |
0.5 | 学习率衰减因子 |
LearnRateDropPeriod |
800 | 学习率衰减周期 |
七、运行环境
- 软件:MATLAB R2021a 或更高版本(需Deep Learning Toolbox)