【问题标题】:Select the features with positive contribution to each class using SHAP values使用 SHAP 值选择对每个类有积极贡献的特征
【发布时间】:2022-11-23 20:30:41
【问题描述】:
我试图获得对一个类很重要并且有积极贡献的特征(在 SHAP 图的正面有红点)。
我可以获得 shap_values 并使用以下代码绘制每个类(例如这里的类 2)的形状摘要:
import shap
explainer = shap.TreeExplainer(clf)
shap_values = explainer.shap_values(X)
shap.summary_plot(shap_values[2], X)
从图中我可以理解哪些特征对该类很重要。在下图中,我可以说酒精和硫酸盐是主要特征(我更感兴趣)。
但是,我想自动执行此过程,以便代码可以对功能进行排名(这在积极方面很重要)并返回前 N 个。关于如何自动执行此解释的任何想法?
我需要自动识别每个班级的那些重要特征。任何其他方法而不是可以处理此过程的 shap 都是理想的。
【问题讨论】:
标签:
python
classification
feature-engineering
shap
【解决方案1】:
您可以执行以下步骤 - 基本上我们试图只获取对分类产生积极影响的值(shap_values>0),当 shap_values<0 时,这意味着不分类
稍后你取平均值并对结果进行排序。
如果您更喜欢全局值,请使用 .abs() 而不是 [shap_df>0]
对于孔模型,仅使用 shap_values 而不是 shap_values['your_class_number']
import shap
import pandas as pd
explainer = shap.TreeExplainer(clf)
shap_values = explainer.shap_values(X)
shap_df = pd.DataFrame(shap_values['your_class_number'],columns=X.columns)
feature_importance = (shap_df
[shap_df>0]
.mean()
.sort_values(ascending=False)
.reset_index()
.rename(columns={'index':'feature',0:'weight'})
.head(n)
)