- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用随机森林进行二元分类,并尝试使用 SHAP 来解释模型预测。
但是,我想将带有值的 SHAP 局部解释图转换为每个实例的 pandas 数据框。
这里有人可以帮助我将 SHAP 本地解释导出到每个实例的 pandas 数据框吗?
我知道 SHAPASH 有 .to_pandas()
方法,但在 SHAAP 中找不到类似的东西
我根据 SO 帖子 here 尝试了类似下面的内容但这并没有帮助
feature_names = shap_values.feature_names
shap_df = pd.DataFrame(shap_values.values, columns=feature_names)
vals = np.abs(shap_df.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)
我希望我的输出如下所示。这里,负号表示对类 0 的特征贡献,正值表示对类 1 的特征贡献
subject_id Feature importance value (contribution)
1 F1 31
1 F2 27
1 F3 20
1 F5 - 10
1 F9 - 29
最佳答案
如果你有这样的模型:
import xgboost
import shap
import warnings
warnings.filterwarnings("ignore")
# train XGBoost model
X,y = shap.datasets.boston()
model = xgboost.XGBRegressor().fit(X, y)
# explain the model's predictions using SHAP values
# (same syntax works for LightGBM, CatBoost, and scikit-learn models)
background = shap.maskers.Independent(X, max_samples=100)
explainer = shap.Explainer(model, background, algorithm="tree")
sv = explainer(X)
你可以像这样分解你的结果:
sv.base_values[0]
22.342787810446044
sv.values[0]
array([-7.68297079e-01, -4.38205232e-02, 3.46814548e-01, -4.06731364e-03,
-3.17875379e-01, -5.37296545e-01, 2.68567768e-01, -1.30198611e+00,
-4.83524088e-01, -4.39375216e-01, 2.94188969e-01, 2.43096180e-02,
4.63890554e+00])
model.predict(X.iloc[[0]])
array([24.019339], dtype=float32)
正好等于:
sv.base_values[0] + sum(sv.values[0])
24.01933200249436
如果你想把结果放到 Pandas df:
pd.DataFrame(sv.values[0], index = X.columns)
0
CRIM -0.768297
ZN -0.043821
INDUS 0.346815
CHAS -0.004067
NOX -0.317875
RM -0.537297
AGE 0.268568
DIS -1.301986
RAD -0.483524
TAX -0.439375
PTRATIO 0.294189
B 0.024310
LSTAT 4.638906
或者,如果您希望所有内容按行排列:
pd.DataFrame(
np.c_[sv.base_values, sv.values],
columns = ["bv"] + list(X.columns)
)
关于python - 如何将 SHAP 本地解释导出到数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71599628/
我需要更好地理解我的 LightGBM 模型,所以我使用了 SHAP 树解释器。 lightgbm 需要对数据进行编码,我将相同的数据传递给树解释器。所以,我担心 SHAP TreeExplainer
对于下面给出的代码,我得到了 shap 值的不同条形图。 在这个例子中,我有一个包含 1000 个 train 样本和 9 个类和 500 个 test 样本的数据集。然后我使用随机森林作为分类器并生
使用以下 Python 代码创建 SHAP summary_plot: explainer = shap.TreeExplainer(model2) shap_values = explainer.s
使用以下 Python 代码创建 SHAP summary_plot: explainer = shap.TreeExplainer(model2) shap_values = explainer.s
我一直在玩玩具数据集,以了解更多关于 shap 库和用法的信息。我发现这个问题是 catboost 回归模型的特征重要性与 shap 库中 summary_plot 的特征重要性不同。 我正在分析 X
我正在使用随机森林进行二元分类,并尝试使用 SHAP 来解释模型预测。 但是,我想将带有值的 SHAP 局部解释图转换为每个实例的 pandas 数据框。 这里有人可以帮助我将 SHAP 本地解释导出
我想获得一个包含重要特征的数据框。使用下面的代码,我得到了 shap_values,但我不确定这些值是什么意思。在我的 df 中有 142 个特征和 67 个实验,但得到了一个带有 ca 的数组。 2
假设我们有一个二元分类问题,我们有两个类别 1 和 0 作为我们的目标。我的目标是使用树分类器来预测给定特征的 1 和 0。此外,我可以使用 SHAP 值对预测 1 和 0 的特征重要性进行排名。到现
我正在使用 python shap包以更好地理解我的机器学习模型。 (来自 documentation:“SHAP(SHpley Additive exPlanations)是一种解释任何机器学习模型
我目前正在尝试在 SHAP 摘要图上绘制一组特定特征。但是,我正在努力寻找这样做所需的代码。 查看 Github 上的源代码时,summary_plot 函数似乎确实具有“功能”属性。但是,这似乎不是
我正在使用随机森林模型和神经网络进行二元分类,其中使用 SHAP 来解释模型预测。我按照教程编写了以下代码以获得如下所示的瀑布图 row_to_show = 20 data_for_predictio
我想更改从 shap 库生成的图的纵横比。 下面的最小可重现示例图: import numpy as np import pandas as pd import matplotlib.pyplot
我正在使用随机森林模型和神经网络进行二元分类,其中使用 SHAP 来解释模型预测。我按照教程编写了以下代码以获得如下所示的瀑布图 row_to_show = 20 data_for_predictio
我想更改从 shap 库生成的图的纵横比。 下面的最小可重现示例图: import numpy as np import pandas as pd import matplotlib.pyplot
我想做一个简单的形状分析并绘制一个 shap.force_plot。我注意到它在 .ipynb 文件中本地运行没有任何问题,但在 Databricks 上失败并显示以下错误消息: Visualizat
我正在尝试为我的随机森林模型创建一个 force_plot,它有两个类(1 和 2),但我对 force_plot 的参数有点困惑。 我有两个不同的 force_plot 参数,我可以提供以下参数:
我需要绘制每个特征如何影响我的 LightGBM 二元分类器中每个样本的预测概率。所以我需要输出概率的 Shap 值,而不是正常的 Shap 值。它似乎没有任何概率输出选项。 下面的示例代码是我用来生
我正在尝试使用 SHAP 对我的产品分类模型进行一些不良案例分析。我的数据看起来像这样: corpus_train, corpus_test, y_train, y_test = train_test
我有一个带有 2 个目标变量的 tensorflow 模型,我想按如下方式查看其 SHAP 值: import pandas as pd import tensorflow as tf import
我有以下数据框: import pandas as pd import random import xgboost import shap foo = pd.DataFrame({'id':[1,2,
我是一名优秀的程序员,十分优秀!