基于不确定性量化的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 个独立的子模型:

  • 预测均值 (μ\muμ):作为最终的预测结果,集成后的均值往往比单体模型更稳定、精度更高。
  • 预测标准差 (σ\sigmaσ) :衡量模型对该样本预测的不确定性。标准差越大,说明各个子模型对该样本的预测分歧越大,模型处于"我不确定"的状态。
  • 95%置信区间 :基于高斯假设,我们可以通过 μ±1.96σ\mu \pm 1.96\sigmaμ±1.96σ 构建预测的置信下界与上界。

二、 MATLAB 实现

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

matlab 复制代码
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

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

程序运行结束后,不仅会在控制台输出高精度的预测指标(如 R2R^2R2 接近于 1,极低的 MAE 等),还会生成极为直观的 不确定性分析图表:

  1. 全景不确定性预测(图 1) :

    图中除了红色的真实值和蓝色的预测均值折线外,还会有一层浅蓝色的 "95% 置信区间"面片 。如果某一段数据的置信区间突然变宽,说明模型对这里的预测非常没有信心(可能是由于训练集未见过类似数据,或该处噪声极大),这在故障预警等场景下具有极高的参考价值。

  2. 子模型轨迹分析 Spaghetti Plot(图 2) :

    通过绘制 5 个子模型的独立预测曲线(浅灰色半透明),你可以直观地看到"预测分歧"。灰色线条聚拢的地方,说明模型达成高度共识;线条发散散乱的地方,正是模型认知不确定性最高的位置。

  3. 不确定性与实际误差相关性散点图(图 3) :

    这是一个极具论文价值的论证图表。横轴是模型的预测标准差(不确定性) ,纵轴是绝对预测误差 。通过拟合趋势线可以看出:当模型表现出高度不确定时,往往其实际预测误差也会更大。这证明了我们的不确定性量化是高度可靠和自洽的------模型不仅能够预测,还能准确知道自己什么时候"可能要犯错"。



四、 总结

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

五、 代码下载

https://mbd.pub/o/bread/YZWclpZraQ==

相关推荐
Evand J9 小时前
【PMSM例程4】PMSM电阻辨识与模型补偿EKF,MATLAB例程。附下载链接,包运行成功
开发语言·matlab·电机·ekf·卡尔曼·pmsm
slandarer9 小时前
MATLAB | 文艺复兴:万圣节使用 MATLAB 绘制黑人抬棺动画
matlab·黑人抬棺
Raymond168812 小时前
零样本TTS长视频配音的工程取舍:自回归、非自回归与韵律边界
人工智能·数据挖掘·回归·音视频·音频
大江东去浪淘尽千古风流人物12 小时前
【FLORA】机器人视频标注引擎解析:三模型如何产出动作指令与四类奖励信号
matlab·机器人·跨模态·遥感·图像匹配·1024程序员节·特征描述符
星夜离尘561 天前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
Evand J1 天前
【MATLAB例程】平面下,5基站对待定位点的定位。基于距离辅助下的AOA。完整代码下载链接
开发语言·matlab·平面·定位·导航·测距·aoa
iCxhust1 天前
MATLAB SPWM仿真
开发语言·matlab
郝学胜-神的一滴1 天前
AI 编程智能体 17:四步搞定专属AI智能体
大数据·人工智能·python·神经网络·算法·langchain·强化学习
zh路西法2 天前
【深入理解 LSTM】从时间反向传播(BPTT)到长时记忆:门控机制与实验验证
pytorch·python·rnn·gru·lstm·bptt
tellmewhoisi2 天前
深度学习23:PyTorch:搭建神经网络测试(查看参数,模型结构和device设置)
pytorch·深度学习·神经网络