基于不确定性量化的CNN-LSTM-Attention多输入单输出回归模型【MATLAB】

作品简介

基于不确定性量化的CNN-LSTM-Attention多输入单输出回归模型

在深度学习的回归预测任务中,传统的神经网络模型往往只输出一个确定性的点估计(Point Estimate)。然而在实际工程应用(如医疗诊断、金融预测、工业设备寿命预估)中,“黑盒”模型给出的单一数值常常让人缺乏安全感。我们不仅需要模型告诉我们“预测结果是多少”,更需要它告诉我们“它对这个预测有多大的把握”。


为了解决这一痛点,本文将为大家详细解析一个结合了特征提取 (CNN)时序建模 (LSTM)特征加权 (Attention) 以及 不确定性量化 (Uncertainty Quantification, UQ) 的强力回归模型,并提供完整的 MATLAB 实现代码。




一、 核心技术原理解析

本模型不仅在网络结构上进行了深度融合,在预测机制上也引入了前沿的“深度集成”思想:


1. 混合网络架构 (CNN-LSTM-Attention)

  • CNN (卷积神经网络):通过 convolution2dLayer 对输入的多维特征进行局部特征感受野的提取。
  • Attention (注意力机制):代码中巧妙地构建了一个类似 Squeeze-and-Excitation (SE) 的通道注意力模块。利用全局平均池化(GAP)提取特征通道的全局信息,经过全连接层和 Sigmoid 激活函数后,计算出每个特征通道的权重,并将其与原始特征进行乘法加权(multiplicationLayer),让模型学会“把注意力放在关键特征上”。
  • LSTM (长短期记忆网络):接收经过注意力加权后的空间特征,展开时间步,捕捉数据中隐含的动态时序依赖关系。

2. 深度集成与不确定性量化 (Deep Ensembles)

单体神经网络极易陷入局部最优,且无法量化自身的“认知不确定性”。本方案采用深度集成法(Deep Ensembles),通过重新初始化网络权重,并行训练 5 个独立的子模型:


  • 预测均值 (μ

  • μ):作为最终的预测结果,集成后的均值往往比单体模型更稳定、精度更高。
  • 预测标准差 (σ

  • σ):衡量模型对该样本预测的不确定性。标准差越大,说明各个子模型对该样本的预测分歧越大,模型处于“我不确定”的状态。
  • 95%置信区间:基于高斯假设,我们可以通过 μ±1.96σ

  • μ±1.96σ 构建预测的置信下界与上界。



二、 MATLAB 实现

以下是 MATLAB 部分代码。代码已进行了详尽的注释,直接准备好您的 data.xlsx(前 N-1 列为输入特征,最后一列为输出标签)即可一键运行。


warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行
tic                     % 开始计时
rng('default')          % 设定随机种子,保证结果可复现

%% 1. 导入数据与预处理
disp('正在导入数据并进行预处理...')
res = xlsread('data.xlsx');
num_size = 0.7;                              % 训练集占数据集比例
outdim = 1;                                  % 最后一列为输出
num_samples = size(res, 1);                  % 样本个数
num_train_s = ceil(num_size * num_samples)+1; % 训练集样本个数
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);

% 数据平铺与格式转换 (适配 CNN 输入格式)
p_train = double(reshape(p_train, f_, 1, 1, M));
p_test  = double(reshape(p_test , f_, 1, 1, N));
t_train = double(t_train)';
t_test  = double(t_test )';

for i = 1 : M
    Lp_train{i, 1} = p_train(:, :, 1, i);
end
for i = 1 : N
    Lp_test{i, 1}  = p_test( :, :, 1, i);
end




三、 运行结果与图表深度剖析

程序运行结束后,不仅会在控制台输出高精度的预测指标(如 R2


R2

 接近于 1,极低的 MAE 等),还会生成极为直观的 不确定性分析图表


  1. 全景不确定性预测(图 1)
  2. 图中除了红色的真实值和蓝色的预测均值折线外,还会有一层浅蓝色的 “95% 置信区间”面片。如果某一段数据的置信区间突然变宽,说明模型对这里的预测非常没有信心(可能是由于训练集未见过类似数据,或该处噪声极大),这在故障预警等场景下具有极高的参考价值。
  3. 在这里插入图片描述
  4. 子模型轨迹分析 Spaghetti Plot(图 2)
  5. 通过绘制 5 个子模型的独立预测曲线(浅灰色半透明),你可以直观地看到“预测分歧”。灰色线条聚拢的地方,说明模型达成高度共识;线条发散散乱的地方,正是模型认知不确定性最高的位置。
  6. 在这里插入图片描述
  7. 不确定性与实际误差相关性散点图(图 3)
  8. 这是一个极具论文价值的论证图表。横轴是模型的预测标准差(不确定性),纵轴是绝对预测误差。通过拟合趋势线可以看出:当模型表现出高度不确定时,往往其实际预测误差也会更大。这证明了我们的不确定性量化是高度可靠和自洽的——模型不仅能够预测,还能准确知道自己什么时候“可能要犯错”。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


四、 总结

通过引入 CNN-LSTM-Attention 构建强大的多尺度时序特征提取主干,再辅以 Deep Ensembles 深度集成框架,本程序实现了从点预测概率化区间预测的跨越。这套框架非常适合作为高质量学术论文(SCI/EI)的实验基础,或用于对安全性要求极高的工程预测落地项目中。欢迎大家复制源码进行实战测试与扩展!

创作时间: