【发布时间】:2021-10-20 01:23:26
【问题描述】:
我有一个中间有 step_mutate() 函数的配方,在 stringr 包的支持下对 Titanic 数据集执行文本数据转换。
library(tidyverse)
library(tidymodels)
extract_title <- function(x) stringr::str_remove(str_extract(x, "Mr\\.? |Mrs\\.?|Miss\\.?|Master\\.?"), "\\.")
rf_recipe <-
recipe(Survived ~ ., data = titanic_train) %>%
step_impute_mode(Embarked) %>%
step_mutate(Cabin = if_else(is.na(Cabin), "Yes", "No"),
Title = if_else(is.na(extract_title(Name)), "Other", extract_title(Name))) %>%
step_impute_knn(Age, impute_with = c("Title", "Sex", "SibSp", "Parch")) %>%
update_role(PassengerId, Name, new_role = "id")
这组转换与rf_recipe %>% prep() %>% bake(new_data = NULL) 完美配合。
当我尝试在工作流中使用超参数调整和 10 倍交叉验证来拟合随机森林模型时,所有模型都失败了。 .notes 列的输出明确指出mutate() 列Title 存在问题:找不到函数str_remove()。
doParallel::registerDoParallel()
rf_res <-
tune_grid(
rf_wf,
resamples = titanic_folds,
grid = rf_grid,
control = control_resamples(save_pred = TRUE)
)
正如this post suggests 我已经明确告诉R str_remove 应该在stringr 包中找到。为什么这不起作用,可能是什么原因造成的?
【问题讨论】:
-
将
extract_title函数分解为两个单独的变异步骤是否有效? -
它没有。也许它与 step_mutate 中的自定义函数有关。
-
尝试的一个想法是在
pkgs中包含control argument for tuning 中的stringr。
标签: r dplyr tidymodels r-recipes