期刊配图:利用箱形图分别表示分类变量的SHAP值

机器学习算法数据库

picture.image

背景

picture.image

picture.image

本期的分析中,使用模拟数据对SHAP值进行可视化复现, 采用文献中“cd图”这一形式来展示SHAP值的分布情况。 通过箱形图的展示,能够清晰地对比不同变量在不同情境下(如清洁天与雾霾天)对模型输出的影响

代码实现

模型构建


          
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", category=FutureWarning)
          
from sklearn.model_selection import train_test_split
          
df = pd.read_excel('2025-1-18公众号Python机器学习AI.xlsx')
          
# 划分特征和目标变量
          
X = df.drop(['y'], axis=1)
          
y = df['y']
          
# 划分训练集和测试集
          
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, 
          
                                                    random_state=42, stratify=df['y'])
          
                                                    
          
from xgboost import XGBClassifier
          
from sklearn.model_selection import GridSearchCV, StratifiedKFold
          
from sklearn.metrics import accuracy_score
          

          
# 定义 XGBoost 二分类模型
          
model_xgb = XGBClassifier(use_label_encoder=False, eval_metric='logloss', random_state=8)
          

          
# 定义参数网格
          
param_grid = {
          
    'n_estimators': [50, 100, 200],
          
    'max_depth': [3, 5, 7],
          
    'learning_rate': [0.01, 0.1, 0.2],
          
    'subsample': [0.8, 1.0],
          
    'colsample_bytree': [0.8, 1.0]
          
}
          

          
# 定义 K 折交叉验证 (Stratified K-Fold)
          
kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=8)
          

          
# 使用网格搜索寻找最佳参数
          
grid_search = GridSearchCV(estimator=model_xgb, param_grid=param_grid, scoring='accuracy',
          
                           cv=kfold, verbose=1, n_jobs=-1)
          

          
# 拟合模型
          
grid_search.fit(X_train, y_train)
          
# 使用最优参数训练模型
          
xgboost = grid_search.best_estimator_
      

使用XGBoost算法进行二分类任务,并通过网格搜索(GridSearchCV)优化超参数。首先将数据集划分为训练集和测试集,然后定义XGBoost分类器,并设置多个超参数选项,通过5折交叉验证(StratifiedKFold)结合网格搜索寻找最佳超参数组合,最后训练出性能最优的模型

图a绘制


          
import shap
          
explainer = shap.TreeExplainer(xgboost)
          
# 计算shap值为Explanation格式
          
shap_values_Explanation = explainer(X_test)
          
plt.figure(figsize=(10, 5), dpi=1200)
          
shap.plots.bar(shap_values_Explanation, show=False)
          
plt.title('SHAP_Explanation Sorted Feature Importance')
          
plt.savefig("1.pdf", format='pdf',bbox_inches='tight')
          
plt.tight_layout()
          
plt.show()
      

picture.image

使用SHAP库计算并可视化XGBoost模型在测试集上的特征重要性,并以条形图形式展示,生成了文献中图a的效果

图b绘制


          
# 计算shap值为numpy.array数组
          
shap_values_numpy = explainer.shap_values(X_test)
          
plt.figure(dpi=1200)
          
shap.summary_plot(shap_values_numpy, X_test, feature_names=X_test.columns, plot_type="dot", show=False)
          
plt.savefig("2.pdf", format='pdf',bbox_inches='tight')
          
plt.show()
      

picture.image

生成文献中图b的效果,通过点图展示每个特征的SHAP值分布

图c、d绘制

picture.image

由于XGBoost二分类模型计算的SHAP值是针对两个类别共同的一个值,而不像随机森林、ET等模型那样会为每个类别计算单独的SHAP值,因此在绘制类别0和类别1的箱型图时,所以这里作者是根据真实标签单独提取每个类别对应的SHAP值进行绘制,完整 代码与数据集获取:如需获取本文的源代码和数据集,请添加作者微信联系

往期推荐

SHAP值+模型预测概率解读机器学习模型的决策过程

聚类与解释的结合:利用K-Means聚类辅助SHAP模型解释并可视化

期刊配图:RFE结合随机森林与K折交叉验证的特征筛选可视化

期刊配图:变量重要性排序与顺序正向选择的特征筛选可视化

期刊配图:SHAP可视化改进依赖图+拟合线+边缘密度+分组对比

期刊配图:SHAP蜂巢图与柱状图多维组合解读特征对模型的影响

基于mRMR筛选和递归特征选择的多模型性能评估与AUC可视化对比

期刊配图:SHAP可视化进阶蜂巢图与特征重要性环形图的联合展示方法

期刊配图:基于t-sne降维与模型预测概率的分类效果可视化

期刊配图:多种机器学习算法在递归特征筛选中的性能变化图示

picture.image

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

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

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