You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中SHAP生成特征重要性图的显示问题求助

解决SHAP可视化中特征名截断与图像缩放问题

实用解决方法

下面是针对SHAP图特征名截断、缩放不佳问题的具体调整方案:

1. 结合Matplotlib布局与标签旋转

SHAP绘图依赖Matplotlib,通过调整标签角度和自动布局,能有效避免特征名被截断:

  • 用plt.xticks(rotation=45, ha='right')旋转x轴标签并右对齐,适配长特征名
  • 调用plt.tight_layout()自动调整图中元素间距,消除重叠

2. 显式设置图像尺寸

部分SHAP绘图函数(如shap.plots.bar)支持直接传入figsize参数;对于不支持的函数(如旧版本的beeswarm),可提前用plt.figure()指定尺寸。

3. 全局配置Matplotlib默认参数

提前设置全局绘图参数,避免重复调整,确保所有SHAP图的缩放一致性:

import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (12, 8)  # 默认图尺寸
plt.rcParams['font.size'] = 10  # 统一字体大小

4. 缩短过长的特征名(可选)

如果特征名本身过长,可手动缩短或设置别名,从根源解决截断问题:

# 示例:将特征名截断为前15个字符并添加省略号
shortened_feature_names = [
    f"{name[:15]}..." if len(name) > 15 else name 
    for name in selected_feature_names
]

修改后的完整代码示例

import shap
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 全局配置Matplotlib参数
plt.rcParams['figure.figsize'] = (12, 8)
plt.rcParams['font.size'] = 10

# 原有SHAP计算逻辑不变
explainer = shap.TreeExplainer(trained_model_gbm)
shap_values = explainer.shap_values(x_test_selected)
shap_importance = np.abs(shap_values).mean(axis=0)
importance_df = pd.DataFrame({
    'features': selected_feature_names,
    'importance': shap_importance
})
importance_df.sort_values(by='importance', ascending=False, inplace=True)
print(importance_df)

# (可选)使用缩短后的特征名
# shortened_feature_names = [f"{name[:15]}..." if len(name) >15 else name for name in selected_feature_names]
shap_exp = shap.Explanation(
    values=shap_values, 
    base_values=explainer.expected_value, 
    data=x_test_selected,
    feature_names=selected_feature_names  # 替换为shortened_feature_names(如果使用)
)

# 调整Beeswarm图
plt.figure(figsize=(14, 10))  # 手动指定尺寸
shap.plots.beeswarm(shap_exp, max_display=len(selected_feature_names))
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

# 调整Bar图
shap.plots.bar(
    shap_exp, 
    max_display=len(selected_feature_names), 
    figsize=(12, 8)
)
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

内容的提问来源于stack exchange,提问作者Lucas F. T. Leonardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:00:13