LSBoost增强算法回归预测+SHAP可解释分析+新数据预测(多输入单输出)MATLAB代码

1. 研究背景

该代码旨在构建一个基于集成学习的回归模型,并利用SHAP(SHapley Additive exPlanations) 方法对模型预测结果进行解释。SHAP源于合作博弈论中的Shapley值,通过量化每个特征对预测的边际贡献,满足对称性、有效性、线性性和零贡献性,是目前机器学习可解释性领域的主流工具。代码将回归建模与SHAP解释相结合,适用于需要同时获得高精度预测和特征重要性分析的场景。

2. 主要功能

  • 数据预处理:从Excel读取数据,进行归一化,划分训练集与测试集(可随机打乱)。
  • 集成学习回归 :使用fitrensemble函数构建基于LSBoost的决策树集成模型,预测目标变量。
  • 模型评估:计算训练集与测试集的R²、MAE、RMSE,并绘制预测对比图、百分比误差图和散点图。
  • 新数据预测:对新的输入数据进行归一化、预测和反归一化,并保存结果。
  • SHAP值计算与可视化:针对每个输出(支持多输出),计算各样本每个特征的SHAP值,绘制蜂群图(展示SHAP值分布及特征值影响)和条形图(展示全局特征重要性)。

3. 算法步骤

3.1 数据预处理与建模
  1. 导入数据xlsread读取Excel文件,最后一列为目标Y,其余为特征X;特征名从第一行获取。
  2. 归一化mapminmax将X和Y归一化到[0,1]区间,保存归一化参数psinpsout
  3. 划分数据集:按用户选择决定是否打乱样本,60%作为训练集,40%作为测试集。
  4. 模型训练 :调用fitrensemble(x_train, y_train, 'Method', 'LSBoost', 'Learners', 'tree', 'LearnRate', 0.2, 'NumLearningCycles', 100),训练一个包含100棵决策树的LSBoost集成模型。
  5. 预测与反归一化 :用训练好的模型预测训练集和测试集,通过mapminmax('reverse')恢复原始量纲。
  6. 评估指标:计算RMSE、R²、MAE,并绘制多种图形(对比图、误差图、散点图)。
3.2 SHAP值计算与可视化(shapley_function.m
  1. 初始化 :获取测试样本数numSamples、特征数numFeatures,计算参考值(各特征的均值)作为基线。
  2. 逐样本逐特征计算Shapley值
    • 对于每个样本i和每个特征j,考虑所有不包含j的特征子集S
    • 对于每个子集S,构造两个输入:
      • 包含特征j的输入:特征j用真实值,S中的特征用真实值,其余特征用参考值;
      • 不包含特征j的输入:特征j用参考值,S中的特征用真实值,其余特征用参考值。
    • 分别用模型预测得到predWithpredWithout,计算边际贡献predWith - predWithout
    • 根据Shapley公式加权累加:贡献除以组合数nchoosek(numFeatures-1, |S|)(等价于权重(|S|!(numFeatures-|S|-1)!)/numFeatures!)。
    • 最终累加值即为特征j在该样本上的SHAP值。
  3. 可视化
    • 蜂群图:每个特征对应一组散点,横坐标为SHAP值,纵坐标按平均绝对SHAP值排序,颜色表示特征原始值的高低(归一化后)。
    • 条形图:按平均绝对SHAP值绘制水平条形图,展示全局特征重要性。
  4. 输出:打印各特征的平均绝对SHAP值。

4. 技术路线

  • 建模:集成学习(LSBoost + 决策树)提供高精度回归预测。
  • 解释性:SHAP方法对黑箱模型进行事后解释,量化特征贡献,增强模型可信度。
  • 流程:数据预处理 → 模型训练 → 评估 → SHAP计算 → 可视化。

5. 公式原理

SHAP值的计算公式(Shapley值)为:
ϕ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 为所有特征的集合;

  • SSS为不包含特征(j)的任意子集;
  • fS(xS)f_S(x_S)fS(xS) 表示仅使用子集SSS中的特征(其他特征用基线值替代)时的模型预测;
  • 权重因子确保公平分配所有特征组合的边际贡献。

代码实现中,基线值采用各特征的全局均值,通过枚举所有子集(幂集)计算加权和。

6. 参数设定

参数 说明
随机种子 2222 固定结果复现
归一化范围 [0,1] mapminmax的默认参数
训练集比例 0.6 总样本的60%用于训练
集成方法 LSBoost 最小二乘增强
基学习器 决策树 每个弱学习器为回归树
学习率 0.2 控制每棵树的贡献
学习周期 100 集成模型中树的数量
SHAP计算方式 全枚举 遍历所有特征子集(复杂度随特征数指数增长)

7. 运行环境

  • 软件 :MATLAB(版本建议R2018b及以上,因使用了fitrensemble等函数)。

8. 应用场景

该代码适用于以下场景:

  • 回归预测任务:如房价预测、销量预测、工业参数预测等,需要建立精确模型。
  • 模型解释需求:当需要向非技术人员解释模型决策依据,或进行特征筛选时,SHAP值可量化各特征的影响方向和强度。
  • 多输出预测:代码已预留多输出支持,可应用于多目标回归问题。
  • 科研与教学:用于展示集成学习与可解释性方法的结合,理解SHAP原理。


相关推荐
AI-Ming2 小时前
注意力机制
算法·ai·ai编程
ℳ๓₯㎕.空城旧梦2 小时前
C++中的解释器模式
开发语言·c++·算法
x_xbx2 小时前
LeetCode:2. 两数相加
算法·leetcode·职场和发展
有点傻的小可爱2 小时前
【MATLAB】新安装并口如何实现能通过PTB启用?
开发语言·windows·经验分享·matlab
兔子7732 小时前
RNN 终于讲明白了:从“模型为什么需要记忆”到 Elman 1990 全文吃透
算法
兔子7732 小时前
LSTM 终于讲明白了:从“RNN 为什么会忘”到 Hochreiter & Schmidhuber 1997 全文吃透
算法
ECT-OS-JiuHuaShan2 小时前
朱梁万有递归元定理,重构《阴符经》
算法·重构
_日拱一卒3 小时前
LeetCode:最长连续序列
算法·leetcode·职场和发展
2401_879503413 小时前
C++与FPGA协同设计
开发语言·c++·算法