【问题标题】: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)
                                )

【讨论】:

    猜你喜欢
    • 2011-08-15
    • 2016-05-16
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多