期刊配图:SHAP特征重要性与相关系数的联合可视化

机器学习大数据算法

picture.image

背景

picture.image

为了更好地展示特征的影响力,可以通过 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
          

          
df = pd.read_excel('2025-2-19公众号Python机器学习AI.xlsx')
          
df
      

picture.image

读取一个名为 '2025-2-19公众号Python机器学习AI.xlsx' 的 Excel 文件,并将其内容加载到一个 Pandas DataFrame 中,同时设置 Matplotlib 的字体为 'Times New Roman' 并确保图表中的负号能够正确显示

原始数据相关系数

picture.image

绘制相关系数可视化, 相关系数的作用: 相关系数衡量两个变量之间的线性关系强度和方向,值范围从 -1 到 1,-1 表示完全负相关,1 表示完全正相关,0 表示没有线性关系

模型训练


          
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_
      

使用 XGBoost 回归模型对数据进行训练,其中 SR 是目标变量(因变量),其余特征为自变量(X),通过网格搜索和 K 折交叉验证来调优模型的超参数,最终找到最佳模型进行训练

基础shap柱状图


          
import sys
          
import os
          
# 将标准输出重定向到os.devnull
          
sys.stdout = open(os.devnull, 'w')
          
import shap
          
explainer = shap.TreeExplainer(xgboost)
          
shap_values = explainer.shap_values(X_test)
          

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

picture.image

通过使用 XGBoost 模型和 SHAP 库计算特征的重要性,并生成 SHAP 特征重要性的条形图

优化后的shap可视化

picture.image

完整 代码与数据集获取:如需获取本文的源代码和数据集,请添加作者微信联系

往期shap进阶可视化

picture.image

picture.image

往期推荐

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

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

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

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

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

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

期刊配图:分类模型对比训练集与测试集评价指标的可视化分析

期刊配图:回归模型对比如何精美可视化训练集与测试集的评价指标

期刊配图:如何同时可视化多个回归模型在训练集与测试集上的预测效果

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

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

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

picture.image

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

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

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