期刊配图:SHAP值双向条形图揭示各类别特征贡献

机器学习算法数据库

picture.image

背景

picture.image

在机器学习的世界中,"黑箱"模型的解释性是一个备受关注的话题。尽管模型可以提供令人惊叹的预测效果,但如果无法解释这些预测背后的决策逻辑,便难以真正应用到实际场景中,特别是在农业、医疗等对决策透明度要求高的领域,需要更直观的方法来理解特征对模型预测的贡献

本文通过使用SHAP值的双向条形图,将复杂模型中的特征重要性以简单直观的方式展现出来,结合模拟数据再现类似图A的可视化效果,展示不同类别特征的重要性,并探讨这种可视化形式如何帮助解读模型决策机制,希望能为模型可解释性在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
          
from sklearn.model_selection import train_test_split
          
df = pd.read_excel('2025-1-14公众号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分类器的超参数,并使用最优参数在训练集上拟合了模型,为后续的预测和分析做好了准备

shap值计算整理


          
import shap
          
explainer = shap.TreeExplainer(xgboost)
          
# 计算shap值为numpy.array数组
          
shap_values_numpy = explainer.shap_values(X)
          
shap_values_df = pd.DataFrame(shap_values_numpy, columns=X.columns)
          

          
#计算 SHAP 值的绝对值
          
shap_values_abs = shap_values_df.abs()
          
#根据原始数据 df['y'] 分组,计算特征贡献度的绝对值均值
          
mean_abs_contributions = shap_values_abs.groupby(df['y']).mean()
          
mean_abs_contributions_transposed = mean_abs_contributions.T
          
mean_abs_contributions_transposed
      

picture.image

使用SHAP值分析模型中各特征的贡献度,按目标变量分组计算每个特征SHAP值绝对值的均值,并将结果转置以方便进一步分析和可视化

SHAP值双向条形图可视化

picture.image

绘制一个SHAP值双向条形图,通过对不同类别(如“死亡”和“存活”)的特征贡献进行分组和对比,直观展示每个特征对模型决策的平均贡献大小及其不确定性,蓝色条形表示特征对类别“死亡”的平均贡献,紫色条形表示对类别“存活”的平均贡献

从图中可以看到:

  • X_3和X_13是对模型决策贡献最大的特征,对“死亡”和“存活”均有较强的区分作用,但其贡献大小在两类之间有所不同,且不确定性也表现不同
  • 其他特征(如X_12和X_1)对分类的影响相对于X_3和X_13较小
  • 特征的贡献程度随着排序逐渐减弱,说明某些特征的解释力较强,而其他特征影响较小

这类可视化便于快速识别模型中哪些特征是决策的关键驱动因素,以及它们在不同分类中的表现差异,完整 代码与数据集获取:如需获取本文的源代码和数据集,请添加作者微信联系

往期推荐

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

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

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

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

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

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

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

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

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

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

picture.image

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
字节跳动 XR 技术的探索与实践
火山引擎开发者社区技术大讲堂第二期邀请到了火山引擎 XR 技术负责人和火山引擎创作 CV 技术负责人,为大家分享字节跳动积累的前沿视觉技术及内外部的应用实践,揭秘现代炫酷的视觉效果背后的技术实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论