✨ 欢迎关注 ✨
本节介绍: 优化SHAP依赖图通过趋势线与置信区间揭示特征的平均边际效应 ,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。 获取 前请咨询,避免不必要的问题。
✨ 文献信息 ✨
文献种展示了在优化了超参数的M2模型配置下,前六个最重要特征的SHAP依赖图。每个子图(a到f)代表一个特征的SHAP值与其对应特征值的关系。图中的颜色渐变表示特征值的高低,其中高值用粉红色表示,低值用蓝色表示
- 趋势线:每个图中都包含了一条红色曲线,表示通过LOESS(局部加权回归)生成的趋势线,展示了每个特征对模型输出的平均边际效应
- 95%置信区间(CI):趋势线周围的橙色阴影区域表示95%的置信区间,反映了趋势线预测的不确定性
- 特征关系:趋势线展示了随着特征值变化,SHAP值的变化,从而反应特征如何影响模型的预测输出
- R²值:每个子图中都标注了R²值,表示趋势线的拟合优度。R²值的范围从0.12到0.68,当然这个值并不是关注重点
SHAP值在给定特征水平上的广泛分布反映了与其他变量的相互作用,而不是模型误差,即使趋势线R2值很低,图中仍然显示出有意义的方向性和条件效应
接下来的复现中采用 LOWESS 进行曲线拟合,LOWESS(或 LOESS)是一种非参数方法,它的目标是平滑数据并捕捉数据的局部趋势,而不产生像多项式拟合那样的全局拟合公式。它通过对每个数据点的邻域进行局部加权回归来完成平滑,而不输出一个统一的拟合公式,然而,文献中提供了一个具体的拟合公式,作者推测该公式是在拟合曲线的基础上,进一步对其进行了多项式拟合。对于该拟合公式部分,这里暂时不进行实现,因其作用并不明显,主要是通过拟合线了解趋势
✨ 基础代码 ✨
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")
df = pd.read_csv('2025-6-25公众号Python机器学习AI.csv')
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['target'], axis=1)
y = df['target']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.3,
random_state=42,
stratify=df['target']
)
from sklearn.model_selection import GridSearchCV, KFold
import xgboost as xgb
# 定义XGBoost模型
xgb_model = xgb.XGBClassifier(random_state=42)
# 定义超参数网格
param_grid = {
'max_depth': [3, 6, 9], # 树的最大深度
'learning_rate': [0.01, 0.1, 0.2], # 学习率
'n_estimators': [100, 200], # 弱学习器(树)的数量
'subsample': [0.8, 1.0], # 数据子样本比率
'colsample_bytree': [0.8, 1.0], # 每棵树的特征子样本比率
}
# 使用KFold进行k折交叉验证
kf = KFold(n_splits=5, shuffle=True, random_state=42)
# 使用GridSearchCV进行超参数调优
grid_search = GridSearchCV(
estimator=xgb_model,
param_grid=param_grid,
scoring='roc_auc', # 使用AUC评估模型
cv=kf, # K折交叉验证
verbose=1, # 输出进度
n_jobs=-1 # 使用所有可用的CPU核心
)
# 训练模型
grid_search.fit(X_train, y_train)
# 使用最佳模型进行预测
best_model = grid_search.best_estimator_
import shap
explainer = shap.TreeExplainer(best_model)
shap_values = explainer.shap_values(X_test)
使用XGBoost模型和网格搜索进行超参数调优,计算SHAP值,这里的SHAP依赖图是通过调用shap.TreeExplainer函数生成的,而不包括和文献一致原始数值的颜色映射、置信区间或趋势拟合线等
基于shap.TreeExplainer 绘制的SHAP值可视化,进一步添加LOWESS拟合趋势线、95%置信区间、特征值的颜色映射,以及R²值,从而丰富图表的可视化信息,达到和文献一样的配图效果
最后定义一个函数plot_lowess_with_ci,用于在给定的SHAP值和特征数据上绘制LOWESS(局部加权回归平滑)趋势线,同时绘制95%置信区间(CI)和其他可视化元素。它将特征与 SHAP 值之间的关系进行可视化,并通过不同的图表展示每个特征的SHAP值分布,在同一画布上
细心的读者可以发现,这里主要针对连续性数据进行可视化,因为分类数据本身不适合采用回归形式来添加拟合线。对于分类数据,更推荐使用其他形式的可视化方法,可以参考往期文献——期刊复现:连续数据与分类数据共存的SHAP可视化散点图与箱形图组合形式,来展示每个类别的 SHAP 值分布
当然,公众号中还有更多 SHAP 运用技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系,获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信deep_ML联系 避免淘宝客服漏掉信息 ,希望能为您的学习之路提供帮助!
✨ 免费赠书 ✨
支持知识分享,畅享学习乐趣!特别感谢清华大学出版社 对本次赠书活动的鼎力支持!即日起,只需点赞、推荐、转发 此文章,作者将从后台随机抽取一位幸运儿,免费包邮赠送清华出版社提供的《MCP协议与AI Agent开发:标准、应用与实现》这本精彩书籍📚!
💡 赶快参与,一键三连,说不定你就是那位幸运读者哦!
往期推荐
期刊复现:连续数据与分类数据共存的SHAP可视化散点图与箱形图组合形式
期刊复现:多分类任务如何拆分为二分类任务并进行堆叠预测提高模型预测性能
期刊配图:SHAP值分析模型可解释性在柱状图与蜂窝图中的进阶组合展示
期刊配图:通过堆叠Mean|SHAP|展示不同区间对模型贡献度的可视化分析
期刊复现:利用UMAP降维算法可视化深度学习随着训练次数的增加模型区分能力的变化
期刊配图:PCA、t-SNE与UMAP三种降维方法简化高维数据的展示应用对比
Science期刊复现:分类、回归与Shap分析多角度揭示同一数据集变量对目标的影响
多模型SHAP+PDP解读Stacking集成模型:从基学习器到元学习器的可解释性与模型调参实现
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考