期刊配图:利用GAM与SHAP值拟合的可视化图表解读

机器学习向量数据库大模型

picture.image

背景

picture.image

广义加性模型(GAM)结合SHAP值的可视化为切入点,通过回归趋势分析,挖掘关键特征在不同取值范围内对模型的正负影响变化。通过分析特征的原始值及其SHAP值的趋势关系,不仅能够识别出特征对于模型的影响趋势,还能直观地呈现特征从正向影响到负向影响的分界线,这种方法为深度理解模型预测提供了新的可视化视角,详细期刊复现参考往期文章——期刊配图:利用GAM与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-21公众号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进行模型解释提供模型基础

SHAP解释:特征重要性排序


          
import shap
          
explainer = shap.TreeExplainer(xgboost)
          
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模型的特征重要性,展示每个特征的SHAP绝对值均值,从图中可以看出,X_2是最重要的特征,其SHAP绝对值均值为0.69,表明它对模型预测结果有最大的影响。其他特征如X_6、X_8、X_1、X_7等的重要性逐渐减小,而X_3、X_5和X_4的影响最小

接下来,选择特征X_2(特征重要性最高的特征)进行更深入的分析,使用GAM(广义加法模型)对其进行建模,并通过SHAP值的可视化来解释该特征对预测结果的贡献。通过这种方式,能够帮助理解X_2特征如何影响模型的预测结果,并解释其与目标变量之间的关系

X_2特征的GAM模型拟合与SHAP值可视化

picture.image


          
# 找到 y=0 与拟合线的所有交点
          
zero_crossing_indices = np.where(np.diff(np.sign(y_pred)))[0]
          

          
# 获取交点时的 x 值(原始的 X_2 值)
          
zero_crossing_x_values = XX[zero_crossing_indices]
          

          
# 保留交点时的 x 值两位小数
          
zero_crossing_x_values_rounded = np.round(zero_crossing_x_values, 2)
          

          
# 输出交点时的 x 值
          
print("交点时的 x 值:", zero_crossing_x_values_rounded)
      

picture.image

picture.image

SHAP值是对模型输出的解释,表示特征对预测结果的贡献。SHAP 值有两个重要方面:

  • 符号(正或负): 表示特征对模型输出的影响方向, 正:特征的增大导致预测值增加,负:特征的增大导致预测值减少
  • 绝对值的大小:表示特征对模型预测的影响程度。绝对值越大,表示对模型预测结果的影响越强

临界点和SHAP值的变化

在图像和数据中,可以看到一个显著的临界点(Tipping Point),发生在X=129.08,SHAP值由负变为正:这是一个非常重要的变化,意味着特征的影响方向发生了变化。在该点之前,特征对模型的影响是负向的,特征的增大导致预测值减小;而在该点之后,特征的影响转为正向,特征的增大导致预测值增加

区间1: 从0.0到129.08(SHAP值为负)

在这个区间内,SHAP值为负,意味着特征值的增加导致预测值减少。然而,预测值减少的程度是动态变化的,它不仅取决于符号,还与SHAP值的绝对值有关。 虽然整个区间的 SHAP值为负,但在区间内不同的SHAP值绝对值表示了预测值减少的不同程度。 SHAP值的绝对值越大,预测值减少的程度越显著

区间2: 从129.08到199.0(SHAP值为正)

在这个区间内,SHAP值为正,意味着特征值的增加导致预测值增加。SHAP值的绝对值表示预测值增加的程度

总结性结论:根据临界点划分区域,SHAP值的符号决定特征对预测值的影响方向(正向或负向)。 根据SHAP值的绝对值确定影响程度,SHAP值的绝对值表示特征对预测结果的影响强度,绝对值越大,影响越强。 非线性影响, 特征的影响并非单纯的线性关系,特征值在不同区间内对预测结果的影响是复杂且非线性的。 因此,影响程度不仅依赖于 SHAP 值的符号,还与其绝对值密切相关

往期推荐

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 技术负责人,为大家分享字节跳动积累的前沿视觉技术及内外部的应用实践,揭秘现代炫酷的视觉效果背后的技术实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论