python - 绘制单个 Shapley 值观察(类似于原作者的 Python 输出)
问题描述
我想在这里创建类似于下图(来自 Python)的东西。
Python代码如下:
import xgboost
import shap
# load JS visualization code to notebook
shap.initjs()
# train XGBoost model
X,y = shap.datasets.boston()
model = xgboost.train({"learning_rate": 0.01}, xgboost.DMatrix(X, label=y), 100)
# explain the model's predictions using SHAP
# (same syntax works for LightGBM, CatBoost, scikit-learn and spark models)
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)
它根据 Shapley 值绘制单个观测值预测。
我想我已经设法使用以下方法在 R 中重新创建了这一点:
library(MASS)
library(xgboost)
library(SHAPforxgboost)
data(Boston)
Boston
X_train <- Boston %>%
dplyr::select(-crim) %>%
as.matrix()
Y_train <- Boston %>%
dplyr::select(crim) %>%
as.matrix()
dtrain <- xgb.DMatrix(data = X_train, label = Y_train)
params <- list(
"eta" = 0.3,
"max_depth" = 6,
"colsample_bytree" = 1,
"min_child_weight" = 3,
"subsample"= 0.8,
"objective"="reg:linear",
"gamma" = 1,
"lambda" = 1,
"alpha" = 0,
"max_delta_step" = 0,
"colsample_bylevel" = 1,
"eval_metric"= "rmse",
"set.seed" = 176
)
watchlist <- list("train" = dtrain)
nround = 50
xgb.model <- xgb.train(params, dtrain, nround, watchlist)
shapValues <- shap.values(xgb_model = xgb.model, X_train = X_train)
shapForceData <- X_train %>%
data.frame(shapValues$shap_score)
singleShapObs <- data.frame(shapForceData[1, ]) # want to plot this data
现在我有一个singleShapObs
包含“真实”值和“Shapley”值的变量(包含的变量.1
是 Shaply 值。如何绘制类似于上述 Python 示例的内容?
注意:这源于我在此处回答的上一个问题。在那个解决方案中,每个geom_col
都是一个观察。我基本上想提取其中一个并以与 Python包geom_cols
类似的方式表示它。Shap
(不必与 Python 图 100% 完全相同)
解决方案
推荐阅读
- git - Jenkins 使用 checkout scm 从 Github 克隆 repo
- javascript - 调用纯函数的函数可以称为纯函数吗?
- javascript - 离子电容器cordova插件无法将图像写入Android上的库
- mongodb - Mongo Db 查询以获取不同的记录
- angular - Angular - 在查看之前加载数据的 NGXS 问题
- python - 如何在我的 kivy 应用程序中打开键盘?
- json - Gatling 的 jsonPath 默默地将空对象转换为“空”字符串
- reactjs - 在 Netlify 上部署 react 应用程序成功并已发布,但未找到页面
- shell - 使用 wget 时 URL 中的通配符
- .net-core - 如何在动作过滤器的 OnActionExecuted 中获取请求参数