python - 在 R 中使用 Python 包(带有“网状”)
问题描述
我正在尝试在此处遵循本教程: : https://hfshr.netlify.app/posts/2020-06-07-variable-inportance-with-fastshap/
本教程是关于使用一种称为“SHAP”的机器学习算法,它试图为用户提供一种方法来解释复杂的“黑盒”风格算法的结果。
按照教程,我能够让一切正常工作 - 除了最后的“力图”。我在底部提供了我正在使用的代码。有人可以帮我弄清楚为什么这些力图不起作用吗?
library(modeldata)
library(tidymodels)
library(tidyverse)
library(doParallel)
library(probably)
library(gt)
data("credit_data")
data("credit_data")
credit_data <- credit_data %>%
drop_na()
set.seed(12)
# initial split
split <- initial_split(credit_data, prop = 0.75, strata = "Status")
# train/test sets
train <- training(split)
test <- testing(split)
rec <- recipe(Status ~ ., data = train) %>%
step_bagimpute(Home, Marital, Job, Income, Assets, Debt) %>%
step_dummy(Home, Marital, Records, Job, one_hot = T)
# Just some sensible values, not optimised by any means!
mod <- boost_tree(trees = 500,
mtry = 6,
min_n = 10,
tree_depth = 5) %>%
set_engine("xgboost") %>%
set_mode("classification")
xgboost_wflow <- workflow() %>%
add_recipe(rec) %>%
add_model(mod) %>%
fit(train)
xg_res <- last_fit(xgboost_wflow,
split,
metrics = metric_set(roc_auc, pr_auc, accuracy))
preds <- xg_res %>%
collect_predictions()
xg_res %>%
collect_metrics()
library(vip)
# Get our model object
xg_mod <- pull_workflow_fit(xgboost_wflow)
vip(xg_mod$fit)
library(fastshap)
# Apply the preprocessing steps with prep and juice to the training data
X <- prep(rec, train) %>%
juice() %>%
select(-Status) %>%
as.matrix()
# Compute shapley values
shap <- explain(xg_mod$fit, X = X, exact = TRUE)
# Create a dataframe of our training data
feat <- prep(rec, train) %>%
juice()
autoplot(shap,
type = "dependence",
feature = "Amount",
X = feat,
smooth = TRUE,
color_by = "Status")
predict(xgboost_wflow, train, type = "prob") %>%
rownames_to_column("rowid") %>%
filter(.pred_bad == min(.pred_bad) | .pred_bad == max(.pred_bad)) %>%
gt()%>%
fmt_number(columns = 2:3,
decimals = 3)
library(patchwork)
p1 <- autoplot(shap, type = "contribution", row_num = 1541) +
ggtitle("Likely bad")
p2 <- autoplot(shap, type = "contribution", row_num = 1806) +
ggtitle("Likely good")
p1+p2
# here is the error (prior to running this code, I ran "pip install shap" in conda)
force_plot(object = shap[1541,],
feature_values = X[1541,],
display = "html",
link = "logit")
Error in py_call_impl(callable, dots$args, dots$keywords) :
TypeError: save_html() got an unexpected keyword argument 'plot_html'
谢谢
解决方案
force_plot()
是相当实验性的,只是碰巧工作。如果您收到错误,请确保您已安装相应的shap
包(及其依赖项)。无论如何,您应该在fastshap GitHub 存储库上报告此问题:https ://github.com/bgreenwell/fastshap/issues 。
--BG
推荐阅读
- python-mss - 使用 python-mss 捕获另一个 Windows 用户的屏幕
- fluentd - 从文件输入插件到 Windows 事件日志输出插件的 Fluentd 配置
- node.js - 我在使用 nodemailer 发送自动电子邮件时遇到问题
- javascript - Workbox 缓存在短时间内未使用
- typescript - Typescript - 如何基于可选布尔参数和默认值执行条件返回类型
- java - 从一个创建多个列表(按特定字段对列表的对象进行分组)
- powerbi - 在 excel 平均值中得到不同的结果,在 power bi 中得到相同的平均值
- python - 使用 pandas 在列名中使用字符串对大型数据集进行分块
- amazon-web-services - AWS Websocket API - 如何传递通过路由传递的数据并将相同的数据进一步传递到 url 路径中的 http 集成端点
- javascript - 为什么天气堆栈会在 React 上向我抛出这个错误?