期刊配图:SHAP模型解释多种特征重要性柱状图可视化解析

机器学习大数据数据库

picture.image

✨ 欢迎关注 ✨

本节介绍:SHAP模型解释多种特征重要性柱状图可视化解析。数据采用模拟数据,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,付费成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。 购买前请咨询,避免不必要的问题。

✨ 文献信息 ✨

picture.image

文献中可视化SHAP柱状图展示了不同特征对模型预测的贡献度,并在每个柱子上标出了具体的SHAP绝对值均值及其相对百分比,从而清晰地呈现了各个特征的相对重要,根据可视化的形式可能是R做的接下来通过python实现这个过程

✨ 代码实现 ✨

  
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  
  
df = pd.read_excel('2025-6-14公众号Python机器学习AI.xlsx')  
from sklearn.model_selection import train_test_split  
# 划分特征和目标变量  
X = df.drop(['SR'], axis=1)  
y = df['SR']  
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,   
                                                    random_state=42)  
                                                    from xgboost import XGBRegressor  
from sklearn.model_selection import GridSearchCV, KFold  
from sklearn.metrics import mean_squared_error, r2_score  
  
# 定义 XGBoost 回归模型  
model_xgb = XGBRegressor(use_label_encoder=False, eval_metric='rmse', 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 折交叉验证  
kfold = KFold(n_splits=5, shuffle=True, random_state=8)  
  
# 使用网格搜索寻找最佳参数  
grid_search = GridSearchCV(estimator=model_xgb, param_grid=param_grid, scoring='neg_mean_squared_error',  
                           cv=kfold, verbose=1, n_jobs=-1)  
  
# 拟合模型  
grid_search.fit(X_train, y_train)  
# 使用最优参数训练模型  
xgboost = grid_search.best_estimator_  
import sys  
import os  
# 将标准输出重定向到os.devnull  
sys.stdout = open(os.devnull, 'w')  
import shap  
explainer = shap.TreeExplainer(xgboost)  
# 计算shap值为numpy.array数组  
shap_values_numpy = explainer.shap_values(X_test)  
# 计算shap值为Explanation格式  
shap_values_Explanation = explainer(X_test)

使用XGBoost模型进行回归任务,并通过网格搜索优化超参数。接着,使用SHAP计算并解释模型的特征重要性。SHAP值有两种格式:shap_values_numpy是以NumPy数组形式存储的SHAP值,适合进行数值计算和可视化;而shap_values_Explanation是更复杂的Explanation格式,除了包含SHAP值外,还包括更多元数据,适用于深入的模型解释和可视化分析

  
plt.figure(figsize=(10, 5), dpi=1200)  
shap.summary_plot(shap_values_numpy, X_test, plot_type="bar", show=False)  
plt.savefig("SHAP_numpy Sorted Feature Importance.pdf", format='pdf',bbox_inches='tight',dpi=1200)  
plt.tight_layout()  
plt.show()

picture.image

绘制SHAP的柱状图总结图,展示特征的重要性,并将图形保存为PDF文件,使用的SHAP值格式是shap_values_numpy(NumPy数组格式)返回的也就是最常见的可视化

  
plt.figure(figsize=(10, 5), dpi=1200)  
shap.plots.bar(shap_values_Explanation, show=False, max_display=10)  
plt.savefig("SHAP_Explanation Sorted Feature Importance.pdf", format='pdf',bbox_inches='tight', dpi=1200)  
plt.tight_layout()  
plt.show()

picture.image

利用了shap_values_Explanation格式绘制SHAP特征重要性柱状图,相比于NumPy数组格式,该格式的柱状图自带每个柱子的SHAP值的绝对均值,并且通过max_display=10参数可以控制显示前10个最重要的特征

  
shap_values_df = pd.DataFrame(shap_values_numpy, columns=X_test.columns)  
# 计算每列的绝对值的均值  
abs_shap_values_mean = shap_values_df.abs().mean()  
# 计算每列的均值占总均值的百分比  
total_mean = abs_shap_values_mean.sum()  
shap_values_percentage = (abs_shap_values_mean / total_mean) * 100  
# 排序特征  
sorted_features = abs_shap_values_mean.sort_values(ascending=True)  
sorted_percentage = shap_values_percentage[sorted_features.index]  
# 绘制 SHAP 总结图  
plt.figure(figsize=(10, 5), dpi=1200)  
shap.summary_plot(shap_values_numpy, X_test, plot_type="bar", show=False)  
# 添加文本信息:每个特征的均值和百分比  
ax = plt.gca()  # 获取当前轴对象  
for i, feature in enumerate(sorted_features.index):  
    # 获取每个特征的柱子位置  
    bar = ax.patches[i]  
    # 在每个柱子旁边添加文本:值和百分比  
    ax.text(bar.get_width() + 0.01, bar.get_y() + bar.get_height() / 2,  
            f'{sorted_features[feature]:.4f}\n({sorted_percentage[feature]:.2f}%)',  
            va='center', ha='left', fontsize=10)  
plt.savefig("SHAP_sorted_Feature_Importance_with_Text.pdf", format='pdf', bbox_inches='tight', dpi=1200)  
plt.tight_layout()  
plt.tight_layout()  
plt.show()

picture.image

这里就绘制SHAP特征重要性柱状图的同时在柱子旁边添加了每个特征的SHAP值的绝对均值和相对百分比贡献,以更直观地展示各特征对模型预测的影响,就和文献一模一样了

✨ 该文章案例 ✨

picture.image

在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。

同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。

✨ 购买介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系,购买作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。

更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 购买前请咨询,避免不必要的问题。

✨ 群友反馈 ✨

picture.image

✨ 淘宝店铺 ✨

picture.image

请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信deep_ML联系 避免淘宝客服漏掉信息 ,希望能为您的学习之路提供帮助!

往期推荐

机器学习在临床数据分析中的应用:从数据预处理到Web应用实现的完整流程教学

期刊配图:基于SHAP算法的驱动因子相互作用贡献矩阵图

期刊配图:PCA、t-SNE与UMAP三种降维方法简化高维数据的展示应用对比

XGBoost模型优化:基于相关系数剔除多重共线性与穷举法进行特征选择

Geographical-XGBoost:一种基于梯度提升树的空间局部回归的新集成模型实现

因果推断:利用EconML实现双重机器学习估计条件平均处理效应 (CATE)

期刊复现:基于部分线性模型的双重机器学习方法

期刊复现:基于XGBoost模型的网页工具SHAP力图解释单样本预测结果

期刊配图:nature cities通过ALE(累积局部效应)解析特征对模型影响

期刊复现:结合因果推断与SHAP可解释性的机器学习实现应用流程

期刊配图:一区SCI常用数据缺失率展示图可视化

因果推断:注册行为对后续消费影响的因果推断分析案例

nature communications:基于LightGBM与随机森林结合的多模型特征选择方法

因果推断与机器学习结合:探索酒店预订取消的影响因素

picture.image

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

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
CV 技术在视频创作中的应用
本次演讲将介绍在拍摄、编辑等场景,我们如何利用 AI 技术赋能创作者;以及基于这些场景,字节跳动积累的领先技术能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论