背景
在机器学习模型的解释过程中,如何有效地展示特征对模型预测结果的影响始终是一个关键问题。SHAP值作为一种广泛应用的特征重要性解释方法,能够量化每个特征对模型输出的贡献。然而,复杂特征的非线性关系常常难以通过简单的SHAP值平均展示清晰表达
该文献b、c、d图以广义加性模型(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-15公众号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)
shap_values = explainer.shap_values(X_test)
使用SHAP的TreeExplainer来计算测试集 (X_test) 中每个样本的 SHAP 值,从而量化每个特征对模型预测结果的贡献
基础shap可视化
feature_name = "X_2"
# 绘制依赖图
shap.dependence_plot(
feature_name,
shap_values,
X_test,
interaction_index=None,
show=False
)
plt.savefig("6.png", format='png', bbox_inches='tight', dpi=1200)
plt.show()
绘制特征 X_2 的 SHAP 依赖图,展示了该特征对模型输出的影响,是最基础的SHAP可视化方法之一;接下来可以结合GAM(广义加性模型)和 SHAP 值以及原始数据,深入探索特征对模型输出的影响并实现更丰富的可视化分析
进阶可视化一
通过GAM模型结合X_2的SHAP值进行可视化,但未添加颜色填充,提供的是基础可视化版本
进阶可视化二
在前面基础上新增针对置信区间的颜色填充,使图像更直观地展示SHAP值的分布和不确定性区域,完整 代码与数据集获取:如需获取本文的源代码和数据集,请添加作者微信联系
进阶可视化三
针对特征X_2
又在前面的基础上实现完整的颜色填充处理,图像更加清晰直观;此改进与文献图基本一致,可以清晰观察SHAP值在0附近的变化趋势及分布特性
针对特征X_3
这里就来看看如何解读这个可视化
可视化展示了特征X_3与模型输出之间的关系,并通过SHAP值揭示了该特征的贡献,以下是详细解读:
- 纵轴SHAP值表示特征X_3对模型输出的贡献大小和方向,正值(上方区域):X_3对模型输出产生正向影响,负值(下方区域):X_3对模型输出产生负向影响
- 横轴表示特征X_3的取值范围,从小到大变化,不同取值范围对应不同的SHAP值趋势,说明了特征的非线性影响
- 趋势曲线——
蓝色实线表示特征
X_3的SHAP值随取值变化的趋势,绿色虚线表示置信区间,表明了模型对趋势预测的可信程度
- Tipping Points图中标出了多个红点(转折点),表明特征X_3的边际贡献从正向变为负向,或从负向变为正向的临界点,这些转折点对应模型输出的重要变化区域,是理解特征影响机制的关键,第一个转折点:从正向贡献变为负向贡献,说明在此点之前,X_3值的增加对模型输出是有利的,但之后则开始抑制模型输出,后续转折点:展现了特征的复杂非线性关系,其对模型的影响是动态变化的
- 统计指标 =67.39%:表明拟合曲线能解释特征X_3和SHAP值之间67.39%的关系,p<0.001:表明拟合结果具有显著性,特征X3与SHAP值的关系在统计上是可信的
这种可视化为模型解释提供了深入的视角,能够帮助分析特征在实际系统中的作用,可以用于识别特征优化的关键取值范围,或揭示模型性能提升的方向
, 完整 代码与数据集获取:如需获取本文的源代码和数据集,请添加作者微信联系
往期推荐
聚类与解释的结合:利用K-Means聚类辅助SHAP模型解释并可视化
期刊配图:SHAP可视化改进依赖图+拟合线+边缘密度+分组对比
期刊配图:SHAP蜂巢图与柱状图多维组合解读特征对模型的影响
基于mRMR筛选和递归特征选择的多模型性能评估与AUC可视化对比
期刊配图:SHAP可视化进阶蜂巢图与特征重要性环形图的联合展示方法
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考