python - 从 SHAP 值中获取特征重要性

标签 python random-forest feature-selection

我想获得一个包含重要特征的数据框。使用下面的代码,我得到了 shap_values,但我不确定这些值是什么意思。在我的 df 中有 142 个特征和 67 个实验,但得到了一个带有 ca 的数组。 2500 个值。

explainer = shap.TreeExplainer(rf)
shap_values = explainer.shap_values(X_test)

shap.summary_plot(shap_values, X_test, plot_type="bar")
enter image description here
我试图将它们存储在 df 中:
rf_resultX = pd.DataFrame(shap_values, columns = ['shap_values'])
但得到:ValueError:传递值的形状是(18, 142),索引意味着(18, 1)
142 - 特征的数量。
18 - 我不知道。
我相信它的工作原理如下:
  • shap_values 需要平均。
  • 并与特征名称配对: pd.DataFrame(feature_names, columns = ['feature_names'])

  • 有没有人有经验,如何解释shap_values?
    起初我认为,值的数量是特征数 x 行数。

    最佳答案

    来自 https://github.com/slundberg/shap/issues/632

    vals = np.abs(shap_values.values).mean(0)
    feature_names = train_x.columns()
    
    feature_importance = pd.DataFrame(list(zip(feature_names, vals)),
                                      columns=['col_name','feature_importance_vals'])
    feature_importance.sort_values(by=['feature_importance_vals'],
                                   ascending=False, inplace=True)
    feature_importance.head()
    

    关于python - 从 SHAP 值中获取特征重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65534163/

    相关文章:

    python - 根据值(value)使用不同的估算器

    java - Mallet 特征选择类似于将特征值设置为 0

    python - 为什么我的 flask 应用程序没有写入日志文件? (在 ubuntu 上通过 apache2 托管)

    python - 数据帧特定转置优化

    python - itertools 库中的 tee() 函数

    r - 尽管 "na.action"设置为 "na.roughfix",但缺少值错误

    python - 如何在Python中将系列类型的列转换为日期时间工作日格式?

    python - 基于概率的 GridSearchCV 超参数调整随机森林分类器

    python - Sklearn 随机森林回归器出错

    python - 使用 scikit-learn 对随机森林进行递归特征消除