随机森林回归预测+SHAP可解释分析+新数据预测(多输入单输出)MATLAB代码



该代码实现了一个基于随机森林回归模型的SHAP(SHapley Additive exPlanations)解释性分析流程,能够对模型预测结果进行特征归因,并通过多种可视化方式展示特征贡献。

研究背景

随着机器学习模型在金融、医疗、工业等领域的广泛应用,模型的可解释性成为关键需求。随机森林等集成模型虽然预测精度高,但内部机制复杂,难以直接理解特征对预测结果的影响。SHAP方法基于合作博弈论中的Shapley值,能够公平地将模型预测值分解为各特征的贡献,满足对称性、有效性、线性性和零贡献性等理想性质,成为当前主流的模型解释工具。本代码将SHAP分析集成到随机森林回归流程中,为回归任务提供可视化的特征贡献解释。

主要功能

  1. 数据预处理:读取Excel数据,进行归一化,并按比例划分训练集和测试集。
  2. 随机森林建模:训练TreeBagger回归模型,并输出特征重要性(OOBPermutedPredictorDeltaError)。
  3. 模型评估:计算训练集和测试集的R²、MAE、RMSE,绘制预测对比图、百分比误差曲线和拟合图。
  4. SHAP值计算:基于测试集,通过穷举特征子集组合计算每个样本每个特征的Shapley值。
  5. SHAP可视化:绘制SHAP摘要蜂群图(展示特征贡献方向与大小)和特征重要性条形图(基于平均绝对SHAP值)。
  6. 新数据预测:对新的输入数据进行归一化、预测和反归一化,输出预测结果。

算法步骤

  1. 数据加载与归一化:读取"回归数据.xlsx",将特征和标签分别归一化至[0,1]区间。
  2. 训练/测试集划分:根据用户选择是否打乱样本,按80%比例划分训练集和测试集。
  3. 随机森林训练:使用TreeBagger函数构建包含100棵决策树的回归森林,设置最小叶子数为3,并开启特征重要性计算。
  4. 模型预测与评估:对训练集和测试集进行预测,反归一化后计算R²、MAE、RMSE,并绘制相关图表。
  5. SHAP计算
    • 对测试集每个样本,遍历每个特征j。
    • 对于特征j,枚举所有可能的特征子集(不含j),构造包含/不包含j的两种输入向量(不包含的特征用全局均值替代)。
    • 计算两种输入下的预测值之差,并除以该子集大小对应的组合数(nchoosek(numFeatures-1, sum(featureCombination)-1)),作为该子集的边际贡献。
    • 累加所有子集的边际贡献,得到特征j的Shapley值。
    • 循环所有特征和样本,得到SHAP值矩阵。
  6. SHAP可视化:根据SHAP值绘制蜂群图(散点颜色表示特征原始值高低)和条形图(平均绝对SHAP值排序)。
  7. 新数据预测:读取"新的多输入.xlsx",利用训练时的归一化参数进行预测并保存结果。

技术路线

  • 开发平台:MATLAB
  • 核心工具箱:Statistics and Machine Learning Toolbox(TreeBagger)、可能需Deep Learning Toolbox(plotregression函数源自神经网络工具箱)以及Communications Toolbox(dec2binvec函数,若不支持可替换为dec2bin)。
  • 数据处理:mapminmax归一化,Excel读写使用xlsread/xlswrite。
  • 模型解释:自定义SHAP计算函数,采用穷举组合方式,虽复杂度较高(特征数较少时适用),但原理清晰。

公式原理

SHAP值基于Shapley值公式:
ϕj=∑S⊆N∖{j}∣S∣! (M−∣S∣−1)!M!(f(S∪{j})−f(S)) \phi_j = \sum_{S \subseteq N \setminus \{j\}} \frac{|S|!\,(M-|S|-1)!}{M!} \left( f(S \cup \{j\}) - f(S) \right) ϕj=S⊆N∖{j}∑M!∣S∣!(M−∣S∣−1)!(f(S∪{j})−f(S))

其中 (M) 为特征总数,(S) 为不含特征j的特征子集,(f(S)) 表示以子集(S)中特征的真实值、其余特征用参考值(如全局均值)替代时的模型预测。代码中使用了等权重简化(未乘以系数 (\frac{|S|!(M-|S|-1)!}{M!}),而是直接除以组合数 (\binom{M-1}{|S|})),因此计算值并非严格Shapley值,但仍能反映特征的相对贡献方向与大小。

参数设定

  • 随机种子rng(2222) 保证结果可复现。
  • 训练集比例ratio = 0.8
  • 随机森林参数
    • trees = 100:决策树数量。
    • leaf = 3:最小叶子样本数(控制过拟合)。
    • Importance = 'on':计算OOB特征重要性。
  • 归一化范围[0,1]
  • SHAP计算:穷举所有子集,无近似(特征数较少时适用)。

运行环境

  • 软件要求:MATLAB R2016b及以上版本(推荐R2020a以上以确保函数兼容)。

应用场景

  • 回归问题解释:适用于需要理解特征如何影响预测结果的回归任务,如房价预测、能源消耗预测、信用评分等。
  • 模型诊断:通过SHAP值识别关键特征,辅助特征工程或模型优化。
  • 业务决策支持:向非技术人员展示预测依据,增强模型可信度。
  • 新数据预测:集成模型部署,对新样本进行预测并保存结果。
相关推荐
IT猿手2 小时前
MATLAB模拟四旋翼无人机飞行,机翼可独立旋转
开发语言·matlab·无人机
我爱C编程4 小时前
基于OMP正交匹配追踪和稀疏字典构造的杂波谱恢复算法matlab仿真
算法·matlab·omp·正交匹配追踪·稀疏字典构造·杂波谱恢复
英英_4 小时前
优化 MATLAB MapReduce 程序性能:从基础调优到进阶提速
开发语言·matlab·mapreduce
英英_5 小时前
MATLAB MapReduce 从入门到实战:大数据处理完整教程
开发语言·matlab·mapreduce
暴躁网友w6 小时前
UKF-IMM 与粒子滤波 IMM:计算效率 Matlab 仿真对比
开发语言·matlab
IT猿手6 小时前
基于控制障碍函数(CBF)的多无人机编队避障路径规划研究,MATLAB代码
开发语言·matlab·无人机·路径规划·动态路径规划
IT猿手6 小时前
基于四旋翼无人机离散建模与增量PID控制及轨迹跟踪研究,MATLAB代码
开发语言·matlab·无人机·cocos2d·路径规划·动态路径规划
暴躁网友w6 小时前
UKF-IMM vs Unscented-IMM:轨迹跟踪精度 Matlab 仿真对比
开发语言·matlab
kaikaile19951 天前
庞加莱截面计算MATLAB程序
开发语言·matlab