Par*_*syk 12 python feature-selection random-forest
我想获得一个包含重要功能的数据框。通过下面的代码,我得到了 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")
Run Code Online (Sandbox Code Playgroud)
我尝试将它们存储在 df 中:
rf_resultX = pd.DataFrame(shap_values, columns = ['shap_values'])
Run Code Online (Sandbox Code Playgroud)
但得到: ValueError: 传递值的形状是 (18, 142),索引意味着 (18, 1)
142 - 特征的数量。18 - 我不知道。
我相信它的工作原理如下:
有人有经验,如何解释 shap_values 吗?起初我认为,值的数量是特征数 x 行数。
小智 12
像这样结合其他两个答案对我有用。
feature_names = X_train.columns
rf_resultX = pd.DataFrame(shap_values, columns = feature_names)
vals = np.abs(rf_resultX.values).mean(0)
shap_importance = pd.DataFrame(list(zip(feature_names, vals)),
columns=['col_name','feature_importance_vals'])
shap_importance.sort_values(by=['feature_importance_vals'],
ascending=False, inplace=True)
shap_importance.head()
Run Code Online (Sandbox Code Playgroud)
shap_values 有(num_rows, num_features)形状;如果你想将其转换为数据帧,你应该将特征名称列表传递给参数columns:rf_resultX = pd.DataFrame(shap_values, columns = feature_names)。
每个样本的每个特征都有自己的形状值;shap 值告诉您该特征对该特定样本的预测贡献了多少;这称为局部解释。您可以对每个特征的 shap 值进行平均,以获得全局特征重要性的感觉,但我建议您查看文档,因为shap 包本身提供了更强大的可视化/解释。
| 归档时间: |
|
| 查看次数: |
30037 次 |
| 最近记录: |