LSTM + SHAP + NSGA-II:多目标预测与优化的完整技术方案
用数据驱动决策,从预测到可解释性再到多目标优化的全流程实战
一、研究背景
在工业生产和工程实践中,我们常常面临这样的问题:给定一组可调节的输入参数,如何预测多个输出指标?又如何找到最优的输入参数组合,使得多个相互冲突的目标同时达到最佳?
例如,在化工生产中,反应温度、压力、催化剂用量等参数会影响产品的产量、纯度、能耗和排放四个指标。我们希望产量最大化、能耗最小化、排放最小化,但这些目标之间往往存在冲突------提高产量可能增加能耗,降低排放可能牺牲纯度。
传统的解决思路是建立机理模型(如偏微分方程),但实际系统往往过于复杂,难以用精确的数学公式描述。数据驱动的方法成为更优选择:
- LSTM(长短期记忆网络):强大的时序/非线性回归预测能力,能基于历史数据建立输入到输出的映射关系
- SHAP(Shapley值解释):可解释性分析,揭示每个输入特征对预测结果的具体贡献
- NSGA-II(非支配排序遗传算法):多目标优化,在冲突目标间寻找Pareto最优解
本文将完整呈现这一技术路线,从数据预处理、LSTM建模、SHAP可解释性分析到NSGA-II多目标优化,附全部代码与运行结果。
二、技术路线总览
整个项目分为两个阶段:

┌─────────────────────────────────────────────────────┐
│ 第一阶段:建模与解释 │
│ data.xlsx → 数据预处理 → LSTM训练 → 预测评估 → │
│ SHAP可解释性分析(蜂群图/条形图/热力图/瀑布图) │
│ 输出:训练好的LSTM模型 net.mat │
├─────────────────────────────────────────────────────┤
│ 第二阶段:多目标优化 │
│ LSTM模型作为目标函数 → NSGA-II优化 → Pareto前沿 │
│ 输出:Pareto最优解集(F1) │
└─────────────────────────────────────────────────────┘
数据集 :150个样本,每个样本包含5个输入特征(x1x5)和4个输出目标(y1y4)。
优化目标:
- 最大化 y1
- 最小化 y2
- 最小化 y3
- 最小化 y4
三、LSTM预测模型
3.1 数据预处理
matlab
% 总样本150个,按7:3划分
num_size = 0.7; % 训练集占比70%
num_train = 105个 % 训练集样本数
num_test = 45个 % 测试集样本数
关键步骤:
- 随机打乱 :
randperm打乱数据集顺序,消除样本偏差 - 归一化 :
mapminmax将输入和输出分别映射到 0,1 区间 - 相关性分析:Pearson相关系数矩阵 + 气泡热图可视化,初步了解变量间关系
3.2 LSTM网络结构
sequenceInputLayer(5) → 输入层,5个特征
↓
lstmLayer(30) → LSTM隐藏层,30个隐单元
↓
fullyConnectedLayer(4) → 全连接层,4个输出
↓
regressionLayer → 回归损失层
3.3 训练参数设置
| 参数 | 取值 | 说明 |
|---|---|---|
| 优化器 | ADAM | 自适应矩估计,收敛快、内存占用小 |
| 批大小 | 30 | 每批30个样本 |
| 最大训练轮数 | 500 | 充分收敛 |
| 初始学习率 | 0.01 | 标准初始值 |
| 学习率下降策略 | piecewise | 分段下降 |
| 下降因子 | 0.2 | 每60轮学习率乘以0.2 |
| 下降周期 | 60 epochs | 经过60轮后学习率降为 0.01×0.2 |
| 数据打乱 | every-epoch | 每轮重新打乱,增强泛化 |
3.4 LSTM核心公式原理
LSTM通过三个门控结构解决传统RNN的长期依赖问题:
遗忘门:决定丢弃哪些历史信息
f_t = σ(W_f · [h_{t-1}, x_t] + b_f)
输入门:决定存储哪些新信息
i_t = σ(W_i · [h_{t-1}, x_t] + b_i)
c̃_t = tanh(W_c · [h_{t-1}, x_t] + b_c)
记忆细胞更新:遗忘旧记忆 + 写入新记忆
c_t = f_t * c_{t-1} + i_t * c̃_t
输出门:基于当前记忆计算隐藏状态
o_t = σ(W_o · [h_{t-1}, x_t] + b_o)
h_t = o_t * tanh(c_t)
其中 σ 为sigmoid函数,* 为逐元素乘法。这种设计使得LSTM可以选择性地记住长期依赖信息,避免梯度消失/爆炸。
3.5 预测评估指标体系
使用5个指标全面评估模型性能:
| 指标 | 公式 | 含义 |
|---|---|---|
| R² (决定系数) | 1 - SS_res / SS_tot | 拟合优度,越接近1越好 |
| RMSE (均方根误差) | √(Σ(y_true - y_pred)² / N) | 误差的平方根,对异常值敏感 |
| MAE (平均绝对误差) | Σ | y_true - y_pred |
| MBE (平均偏差) | Σ(y_pred - y_true) / N | 预测偏差方向,正=高估 |
| MAPE (平均相对误差) | Σ | (y_true - y_pred)/y_true |
3.6 预测结果
| 输出 | 训练集R² | 测试集R² | 训练集RMSE | 测试集RMSE | 训练集MAE | 测试集MAE |
|---|---|---|---|---|---|---|
| y1 | 0.9301 | 0.9195 | 0.9263 | 1.1433 | 0.7351 | 0.8917 |
| y2 | 0.9745 | 0.9737 | 38.77 | 47.13 | 31.65 | 36.58 |
| y3 | 0.9393 | 0.9329 | 126693 | 172700 | 94660 | 124005 |
| y4 | 0.8370 | 0.8029 | 4.662 | 4.775 | 3.554 | 3.608 |
关键发现:
- y2 预测效果最佳,测试集R²高达 0.9737,说明模型对y2的拟合能力极强
- y1 表现优秀,R²为 0.9195,预测结果可靠
- y3 表现良好,R²为 0.9329,但RMSE较大(与y3本身的量级有关)
- y4 相对较弱,R²为 0.8029,但仍然在可接受范围内,说明y4可能受未纳入模型的其他因素影响
训练集与测试集对比 :所有输出的训练集和测试集R²非常接近,差距最大仅约0.034(y4),说明模型没有过拟合,泛化能力良好。



四、SHAP可解释性分析
4.1 SHAP值原理
SHAP值来源于合作博弈论中的Shapley值,核心思想是:将模型预测值分解为每个特征的贡献之和。
对于一个有 f 个特征的模型,特征j的SHAP值计算公式为:
φ_j = Σ_{S⊆N\{j}} [|S|! × (f-|S|-1)! / f!] × [f_x(S∪{j}) - f_x(S)]
其中:
N为所有特征的集合S为不包含特征j的任意特征子集f_x(S)为仅使用特征子集S时的模型预测值(其他特征替换为基线值)- 权重项
|S|! × (f-|S|-1)! / f!确保公平分配
通俗理解 :SHAP值计算了在所有可能的特征子集组合中,包含特征j与不包含特征j时预测值的差异,并加权平均。这个值反映了该特征对预测结果的平均边际贡献。
4.2 多输出SHAP优化
由于本项目有4个输出,代码中采用同时计算所有输出维度 的策略(shapley_lstm_multi.m),避免重复预测,计算效率提升约4倍:
计算量 :5个特征,每个样本需遍历 2^(5-1) = 16 种特征子集组合,共30个样本,总预测调用次数为 30 × 5 × 16 = 2400次,耗时约 7.8秒。
4.3 SHAP可视化图表
每个输出变量生成6类SHAP可视化图表,共24张:
| 图表类型 | 用途 |
|---|---|
| 摘要蜂群图 | 展示所有样本中每个特征的SHAP值分布,颜色表示特征值高低 |
| 特征重要性条形图 | 按平均绝对SHAP值排序,直观显示特征重要性排名 |
| 特征依赖图 | 展示SHAP值随特征值的变化趋势,揭示非线性关系 |
| SHAP值热力图 | 全局视角,展示样本×特征矩阵的SHAP值大小 |
| 力导向图(样本1) | 单个样本的特征贡献分解,正向/负向一目了然 |
| 力导向图(最大贡献样本) | 最极端样本的贡献分解,揭示模型决策边界 |
此外还有一张综合对比图,将4个输出变量的特征重要性并列展示,便于横向比较。











五、NSGA-II多目标优化
5.1 为什么需要多目标优化?
在真实场景中,多个目标往往相互冲突。例如本项目的4个目标:
- 最大化 y1 → 可能需要增大某些输入
- 最小化 y2 → 可能需要减小某些输入
- 最小化 y3 → 对输入的需求可能与其他目标矛盾
- 最小化 y4 → 又是一组约束
不存在一个解使所有目标同时达到最优 ,因此需要寻找一组Pareto最优解------在不降低至少一个目标的前提下,无法改善任何其他目标。
5.2 NSGA-II算法核心流程
初始化种群(100个个体)
↓
非支配排序(分层)
↓
拥挤距离计算
↓
┌───────────────────── 迭代50次 ─────────────────────┐
│ 锦标赛选择(等级低优先→拥挤度大优先) │
│ 交叉操作(pc=0.85,产生80个子代) │
│ 变异操作(mu=0.2) │
│ 父代+子代合并(180个) │
│ 非支配排序 + 拥挤距离计算 │
│ 精英保留策略 → 保留前100个个体 │
└─────────────────────────────────────────────────────┘
↓
输出Pareto前沿(第1等级F1)

5.3 NSGA-II核心公式
非支配排序:个体p支配个体q当且仅当:
p.cost ≤ q.cost 对所有目标成立,且至少一个目标严格小于
拥挤距离:在同一非支配等级内,衡量个体周围的密度,用于保持解的多样性:
d_i = Σ_j |cost_j(i+1) - cost_j(i-1)| / (cost_j_max - cost_j_min)
边界个体的拥挤距离设为无穷大,使其优先被保留。
锦标赛选择 :随机抽取2个个体,非支配等级低者胜出 ;等级相同时拥挤距离大者胜出------这保证了算法同时向Pareto前沿收敛并保持解的多样性。
5.4 变量约束与步长
| 变量 | 下界 | 上界 | 步长 | 取值个数 |
|---|---|---|---|---|
| x1 | 1 | 13 | 1 | 13 |
| x2 | 0 | 2.8 | 0.1 | 29 |
| x3 | 3 | 21 | 0.5 | 37 |
| x4 | 0.6 | 1.6 | 0.05 | 21 |
| x5 | 6 | 41 | 1 | 36 |
5.5 目标函数设计
NSGA-II通过LSTM模型计算目标函数值:
matlab
function z = costfunction(x)
load net net ps_input ps_output
XTest = mapminmax('apply', x', ps_input); % 归一化
YPred_Test = predict(net, XTest); % LSTM预测
Ra = mapminmax('reverse', YPred_Test, ps_output); % 反归一化
z = [-Ra(1); Ra(2); Ra(3); Ra(4)]; % max y1, min y2~y4
end
注意代码将 max y1 转化为 -Ra(1),这是因为NSGA-II默认求解最小化问题,取负号实现最大化。
5.6 NSGA-II参数设定
| 参数 | 取值 | 说明 |
|---|---|---|
| 种群大小 | 100 | 每代个体数 |
| 最大迭代次数 | 50 | 进化代数 |
| 交叉概率 | 0.85 | 生成子代比例为种群的80% |
| 变异概率 | 0.2 | 每个基因的变异概率 |
| 锦标赛选择大小 | 2 | 每次随机选2个进行竞争 |
六、运行环境
| 项目 | 规格 |
|---|---|
| 编程语言 | MATLAB2024 |
| 核心工具箱 | Deep Learning Toolbox、Statistics and Machine Learning Toolbox |
| 依赖库 | color.p、nclCM.p(自定义配色方案) |
| 运行脚本 | main1_LSTM.m(先运行)→ main2_NSGAII.m(后运行) |
| 数据文件 | data.xlsx(150×9) |
| 模型文件 | net.mat(训练好的LSTM网络 + 归一化参数) |
七、应用场景
本技术方案适用于以下场景:
1. 工业参数优化
- 化工/冶金/制药过程的工艺参数调优
- 在产量、质量、能耗、排放等多目标间寻找最佳平衡点
2. 金融风控
- 多个风险指标的同时预测与优化
- 投资组合的收益-风险多目标优化
3. 能源管理
- 建筑/工厂能耗的多个指标预测与优化
- 新能源发电的功率预测与调度优化
4. 智能制造业
- 产品质量的多个维度预测与控制
- 加工参数的多目标优化(效率、精度、成本)
5. 环境科学
- 污染物排放的多个指标预测
- 环保工艺参数的多目标优化
八、总结与展望
项目亮点
- 端到端完整流程:从数据到预测、从可解释性到优化,一站式解决
- LSTM + SHAP 组合:不仅预测,还"讲人话"解释为什么这么预测
- 多目标Pareto优化:现实世界的问题从来不是单目标,NSGA-II提供了科学的折中方案
- 代码可复用性高:模块化设计,可快速迁移到其他领域
改进方向
- 探索更优的LSTM结构:增加更多隐藏层或使用双向LSTM/BiLSTM
- 引入贝叶斯超参数优化:自动搜索LSTM和NSGA-II的最佳参数组合
- 增加更多可解释性方法:结合Grad-CAM、Integrated Gradients等方法交叉验证
- 部署到生产环境:将MATLAB模型转换为Python ONNX或TensorFlow格式,便于上线
本文基于MATLAB实现,完整代码包括 main1_LSTM.m(建模+SHAP分析)和 main2_NSGAII.m(NSGA-II优化),数据文件为 data.xlsx,模型文件为 net.mat。