


MATLAB 代码实现了一个基于 贝叶斯优化(Bayesian Optimization) 的 TCN-LSTM 混合神经网络 分类模型,并集成了 SHAP 可解释性分析。
一、研究背景
随着工业物联网、智能传感、金融预测等领域的快速发展,时序数据的分类与预测成为研究热点。传统方法(如 SVM、随机森林)难以捕捉时序数据的长期依赖与局部特征,而单一深度学习模型(如 LSTM、TCN)在特征提取上各有局限。TCN 能有效提取局部时序特征,LSTM 擅长捕捉长期依赖,二者结合可提升分类性能。此外,超参数选择对模型性能影响巨大,贝叶斯优化因其高效性被广泛用于自动调参。SHAP 分析则提供模型决策的可解释性,增强模型可信度。
二、主要功能
- 数据加载与预处理
- 读取 Excel 数据集,打乱顺序,按类别分层划分训练集/测试集。
- 贝叶斯优化超参数
- 优化 TCN 与 LSTM 的关键超参数(卷积核数、核大小、丢弃率、残差块数、LSTM 单元数、学习率等)。
- TCN-LSTM 网络构建
- 根据优化后的参数动态构建混合网络。
- 模型训练与评估
- 使用 Adam 优化器训练,绘制训练曲线、混淆矩阵、预测结果对比图。
- SHAP 可解释性分析
- 计算测试样本的 SHAP 值,绘制摘要图、特征重要性图、依赖图。
- 结果保存
- 保存优化结果、最佳参数、模型性能等。
三、算法步骤
-
数据准备
- 读取 Excel,获取类别数、特征数、样本数。
- 按类别分层划分训练集(70%)和测试集(30%),并转置为适合网络输入的格式。
- 归一化到 [0,1],并将标签转为 categorical 格式。
-
贝叶斯优化
- 定义超参数搜索空间(整数/连续/对数尺度)。
- 目标函数:对每组超参数训练 TCN-LSTM(最大 20 轮),返回验证集上的 1 − 准确率(作为最小化目标)。
- 运行贝叶斯优化,记录最优参数。
-
模型构建与训练
- 使用最优超参数构建 TCN-LSTM 网络(调用
createTCNLSTMNetwork)。 - 设置完整训练参数(最大 120 轮,学习率分段下降等)。
- 训练网络并保存模型。
- 使用最优超参数构建 TCN-LSTM 网络(调用
-
预测与评估
- 对训练集、测试集进行预测,将概率输出转为类别索引。
- 计算准确率,绘制预测对比图和混淆矩阵。
-
SHAP 分析
- 选取部分测试样本,计算每个特征对预测结果的贡献值。
- 绘制 SHAP 摘要图、特征重要性条形图、特征依赖图。
四、技术路线
数据 → 分层划分 → 归一化 → 贝叶斯优化超参数 → TCN-LSTM 网络构建 → 训练 → 预测评估 → SHAP 解释
- 贝叶斯优化:使用高斯过程代理模型,结合采集函数(EI+)高效探索超参数空间。
- TCN-LSTM 混合结构 :
- TCN 部分:多个残差块,每块包含膨胀卷积、权重归一化、ReLU 激活、空间丢弃。
- LSTM 部分:承接 TCN 输出,进一步建模时序依赖。
- 最后接全连接层 + softmax 进行分类。
- SHAP 分析:基于 Shapley 值理论,量化各特征对预测的边际贡献。
五、公式原理
1. TCN 核心公式
膨胀卷积(Dilated Convolution):
F(s)=(x∗df)(s)=∑i=0k−1f(i)⋅xs−d⋅i F(s) = (x *d f)(s) = \sum{i=0}^{k-1} f(i) \cdot x_{s - d \cdot i} F(s)=(x∗df)(s)=i=0∑k−1f(i)⋅xs−d⋅i
其中 ddd为膨胀系数,kkk 为卷积核大小。
残差块输出:
o=Activation(x+Conv1D(x)) o = \text{Activation}(x + \text{Conv1D}(x)) o=Activation(x+Conv1D(x))
2. LSTM 单元
it=σ(Wi⋅[ht−1,xt]+bi)ft=σ(Wf⋅[ht−1,xt]+bf)ot=σ(Wo⋅[ht−1,xt]+bo)C~t=tanh(Wc⋅[ht−1,xt]+bc)Ct=ft⊙Ct−1+it⊙C~tht=ot⊙tanh(Ct) \begin{aligned} i_t &= \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) \\ f_t &= \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) \\ o_t &= \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) \\ \tilde{C}t &= \tanh(W_c \cdot [h{t-1}, x_t] + b_c) \\ C_t &= f_t \odot C_{t-1} + i_t \odot \tilde{C}_t \\ h_t &= o_t \odot \tanh(C_t) \end{aligned} itftotC~tCtht=σ(Wi⋅[ht−1,xt]+bi)=σ(Wf⋅[ht−1,xt]+bf)=σ(Wo⋅[ht−1,xt]+bo)=tanh(Wc⋅[ht−1,xt]+bc)=ft⊙Ct−1+it⊙C~t=ot⊙tanh(Ct)
3. SHAP 值
对于样本 xxx,特征 jjj 的 SHAP 值:
ϕj=∑S⊆F∖{j}∣S∣!(∣F∣−∣S∣−1)!∣F∣![fS∪{j}(xS∪{j})−fS(xS)] \phi_j = \sum_{S \subseteq F \setminus \{j\}} \frac{|S|! (|F| - |S| - 1)!}{|F|!} \left[ f_{S \cup \{j\}}(x_{S \cup \{j\}}) - f_S(x_S) \right] ϕj=S⊆F∖{j}∑∣F∣!∣S∣!(∣F∣−∣S∣−1)![fS∪{j}(xS∪{j})−fS(xS)]
其中 FFF 为所有特征集合,fSf_SfS 为仅使用特征子集 SSS 时的模型预测。
六、参数设定
| 参数类别 | 参数名 | 取值范围 / 设定值 | 说明 |
|---|---|---|---|
| 数据划分 | num_size |
0.7 | 训练集比例 |
| 贝叶斯优化 | maxIterations |
30 | 最大迭代次数 |
| 贝叶斯优化 | maxEpochs |
20 | 优化时单次训练最大轮数 |
| 优化变量 | numFilters |
[8, 32] | TCN 卷积核数 |
| 优化变量 | filterSize |
[2, 6] | 卷积核大小 |
| 优化变量 | dropoutFactor |
[0.05, 0.3] | 空间丢弃率 |
| 优化变量 | numBlocks |
[1, 3] | 残差块数 |
| 优化变量 | lstmUnits |
[32, 128] | LSTM 单元数 |
| 优化变量 | InitialLearnRate |
[1e-4, 1e-2] | 初始学习率(对数变换) |
| 优化变量 | LearnRateDropFactor |
[0.5, 0.9] | 学习率下降因子 |
| 完整训练 | MaxEpochs |
120 | 完整训练最大轮数 |
| 完整训练 | miniBatchSize |
30 | 批大小 |
| 完整训练 | LearnRateDropPeriod |
50 | 每 50 轮下降一次学习率 |
| SHAP 分析 | numShapSamples |
min(N,50) | 用于 SHAP 分析的样本数 |
七、运行环境
- 软件:MATLAB R2023b
八、应用场景
该代码适用于以下典型场景:
- 工业故障诊断
- 输入传感器时序数据,判断设备运行状态(正常/故障类型)。
- 金融时序分类
- 根据股票、期货等历史序列预测涨跌类别。
- 医疗信号分类
- 心电图(ECG)、脑电图(EEG)等生理信号的自动分类。
- 人机交互与行为识别
- 基于加速度计、陀螺仪数据识别用户行为(走路、跑步、跌倒等)。
- 智能电网负荷识别
- 对用电负荷曲线进行分类,识别用电模式。