期刊复现:通过Sobol敏感性进行模型解释解析特征对目标的直接影响与总效应

机器学习算法推荐算法

picture.image

✨ 欢迎关注Python机器学习AI ✨

本节介绍:通过Sobol敏感性进行模型解释解析特征对目标的直接影响与总效应,数据采用模拟数据无任何现实意义,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。完整数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。文末提供高效的学习工具~!

✨ 论文信息 ✨

picture.image

在这篇文献中,使用Sobol敏感性分析来评估不同因素对二氧化碳吸附能力的影响。该分析帮助识别各输入特征(如微孔体积 (MPV)、吸附温度、和总孔体积 (TPV))对吸附效率的直接影响和总影响

Sobol敏感性分析是一种用于定量评估输入变量对模型输出不确定性贡献的全局敏感性分析方法,通过方差分解来量化不同输入参数或特征对模型输出的影响程度,Sobol方法通过将模型输出的方差分解成多个部分来分析各输入参数的敏感性。假设有一个复杂的模型,其输出Y由多个输入参数X1,X2,...,Xn组成,Sobol方法的目标是测量每个输入参数对输出Y变异性的贡献大小

  • 一阶敏感度指数:衡量单个输入变量对输出的独立影响。即,改变一个输入时,输出的方差中有多少比例是由该输入变量引起的
  • 总敏感度指数:衡量输入变量自身及其与其他输入变量交互的总影响。它考虑了输入与其他输入之间的相互作用,不仅仅是单一输入的影响
  • 二阶敏感度:衡量两个输入变量之间的交互作用对输出的影响。这通常通过计算二阶交互效应来实现

文献中的敏感性分析说明,吸附温度(T)是影响最大的参数,S1(~0.5)和ST(~0.6)最高。这表明温度对Ads具有主要的直接影响,并与其他特征显著相互作用,加强了其作为吸附性能关键决定因素的作用。微孔体积(MPV)是另一个关键因素,具有显著的S1(~0.2)和ST(~0.3),表明个体对Ads预测有很强的贡献和相互作用。其它特征解释类似,接下来在模拟数据集上实现这个解释过程

✨ 模拟实现 ✨

  
import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  
plt.rcParams['font.family'] = 'Times New Roman'  
plt.rcParams['axes.unicode_minus'] = False  
import warnings  
# 忽略所有警告  
warnings.filterwarnings("ignore")  
path = r"2025-11-6公众号Python机器学习AI.xlsx"  
df = pd.read_excel(path)  
  
from sklearn.model_selection import train_test_split  
# 划分特征和目标变量  
X = df.drop(['SR'], axis=1)  # 从数据集中去掉目标变量 'y',得到特征变量 X  
y = df['SR']  # 提取目标变量 y  
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(  
    X,  # 特征变量  
    y,  # 目标变量  
    test_size=0.3,  # 测试集所占比例,这里为 30%  
    random_state=42  # 随机种子,确保结果可重复  
)  
  
from xgboost import XGBRegressor  
from sklearn.model_selection import GridSearchCV, KFold  
# 定义XGBoost模型  
xgb_model = XGBRegressor(objective='reg:squarederror', random_state=42)  
# 设置参数网格(可根据需要调整)  
param_grid = {  
    'n_estimators': [100, 300],   # 树数量  
    'max_depth': [3, 5, 7],           # 树最大深度  
    'learning_rate': [0.01, 0.1], # 学习率  
    'subsample': [0.7, 0.8],     # 子采样比率  
    'colsample_bytree': [0.7, 0.8] # 特征采样比率  
}  
# K折交叉验证  
kfold = KFold(n_splits=10, shuffle=True, random_state=42)  
# 网格搜索  
grid_search = GridSearchCV(  
    estimator=xgb_model,  
    param_grid=param_grid,  
    scoring='neg_mean_squared_error',  # 评价指标  
    cv=kfold,  
    verbose=2,  
    n_jobs=-1  
)  
# 拟合训练数据  
grid_search.fit(X_train, y_train)  
# 使用最佳模型预测  
best_model = grid_search.best_estimator_

使用XGBoost回归模型,通过网格搜索和10折交叉验证优化超参数,并训练出最佳模型以预测目标变量SR

  
from SALib.sample import saltelli  
from SALib.analyze import sobol  
  
# 特征名称(从 X_train 中获取)  
param_names = list(X_train.columns)  
problem = {  
    'num_vars': len(param_names),  
    'names': param_names,  
    # 每个特征的范围(这里假设使用训练集的最小值和最大值作为上下限)  
    'bounds': [[X_train[col].min(), X_train[col].max()] for col in param_names]  
}  
# N 是采样规模,可根据精度需求调整(建议至少 512 或 1024)  
param_values = saltelli.sample(problem, N=512, calc_second_order=True)  
# 用最优模型计算输出  
Y = best_model.predict(pd.DataFrame(param_values, columns=param_names))  
# Sobol 敏感性分析  
# ======================  
Si = sobol.analyze(problem, Y, calc_second_order=True, print_to_console=True)  
# 一阶、二阶、总效应  
sobol_df = pd.DataFrame({  
    'Feature': problem['names'],  
    'S1': Si['S1'],         # 一阶指数  
    'ST': Si['ST'],         # 总效应指数  
    'S1_conf': Si['S1_conf'], # 置信区间  
    'ST_conf': Si['ST_conf']  
})

使用Sobol敏感性分析计算特征对模型输出的影响,分析每个特征的一阶效应、总效应及其置信区间,以评估其在预测结果中的重要性

  
from matplotlib import font_manager  
# 设置条形图的位置  
x = np.arange(len(sobol_df['Feature']))  
# 绘制条形图  
fig, ax = plt.subplots(figsize=(10, 6))  
# 绘制一阶敏感度(S1)和总敏感度(ST)  
bar_width = 0.35  
ax.bar(x - bar_width/2, sobol_df['S1'], bar_width, label='S1', color='red')  
ax.bar(x + bar_width/2, sobol_df['ST'], bar_width, label='ST', color='blue')  
ax.set_ylabel('Sobol Index', fontsize=18, fontweight='bold')  
# 设置x轴标签的位置和字体  
ax.set_xticks(x)  
ax.set_xticklabels(sobol_df['Feature'], fontsize=18, fontweight='bold')  
# 设置y轴刻度字体大小和加粗  
ax.tick_params(axis='y', labelsize=18)  
# 旋转x轴刻度标签90度  
plt.xticks(rotation=45, fontsize=18, fontweight='bold')  
# 创建字体属性对象  
font_props = font_manager.FontProperties(weight='bold', size=18)  
# 添加图例,关闭边框  
ax.legend(fontsize=18, prop=font_props, frameon=False)  
plt.savefig("S1 ST.pdf", format='pdf', bbox_inches='tight', dpi=1200)  
plt.tight_layout()  
plt.show()

picture.image

绘制Sobol敏感度分析结果的条形图,比较每个特征的一阶敏感度(S1)和总敏感度(ST),可以发现在模拟数据集上,VSS/TSS对模型的影响最大,因为它的一阶Sobol指数 (S1) (主效应)和总Sobol指数 (ST) (总效应=主效应+交互效应)都显著高于其他特征,表明该特征对模型输出有很大的贡献,其他特征,如infP、infS的一阶和总Sobol指数相对较小,表明它们对模型输出的直接影响相对较弱,从S1(红色) 和ST(蓝色) 的对比来看,VSS/TSS的一阶效应(S1)和总效应(ST)接近,表明该特征的影响不仅直接作用于模型输出,还与其他特征存在较强的交互作用,pH、T和salinity等特征对模型输出的影响相对较小,其一阶和总效应指数均较低

在文献中后续还进行模型SHAP解释,与 Sobol敏感度分析进行对比补充

picture.image

当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息

picture.image

✨ 该文章案例 ✨

picture.image

在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。

同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。

✨ 介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到公众号后台获取作者的公众号合集。截至目前为止,合集已包含300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。

更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。

✨ 群友反馈 ✨

picture.image

✨ 合集获取 ✨

picture.image

欢迎到公众号后台,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!

✨ 书籍推荐 ✨

无论你是零编程基础的科研新手,还是想提升机器学习技能的医学科研工作者,这本书都能带你从入门到进阶,掌握Python数据分析+医学AI应用的全流程技能

✨ AI工具推荐 ✨

picture.image

往期推荐

期刊配图:模型SHAP解释特征类别柱状图、饼图与蜂巢图的组合展示

期刊复现:基于自动机器学习的预测模型构建及其残差和部分依赖分析

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况最优模型的SHAP解释

期刊复现:单变量特征降维与共线性分析结合RFE集成排名进行特征筛选下的组合拳流程

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况优化与最优模型选择可视化

期刊复现:基于相关系数与AUC值优化特征选择剔除冗余特征精简模型(附代码)

期刊复现:如何正确使用LASSO进行二分类特征选择?避开常见误区,掌握实用技巧

期刊复现:融合聚类与多分类转二分类的亚型可解释SHAP机器学习模型构建

期刊复现:基于LightGBM、XGBoost与RF的Lasso回归堆叠模型在连续和分类特征上的模型解释

期刊复现:基于LightGBM、XGBoost与RF的堆叠模型贝叶斯优化调参与Lasso回归元模型,结合10倍交叉验证

picture.image

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎大规模机器学习平台架构设计与应用实践
围绕数据加速、模型分布式训练框架建设、大规模异构集群调度、模型开发过程标准化等AI工程化实践,全面分享如何以开发者的极致体验为核心,进行机器学习平台的设计与实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论