参数范围本质上与 tidymodels 中的模型规范和配方规范分开。当您设置 tune() 时,您正在向 tune 函数发出一个信号,表明此参数将采用多个值并且应该进行调整。
因此,作为一个简短的回答,您不能在指定配方或模型时指定参数范围,但您可以像之前一样立即创建参数对象。
最后,您需要参数集来构建用于超参数调整的网格值,并且您可以通过至少 4 种方式创建这些 gid 值。
第一种方法是按照自己的方式进行操作,将所需的参数从工作流程中提取出来并在需要时进行修改。
第二种方法是创建一个参数对象来匹配您需要使用的参数。此选项和其余选项要求您确保为正在调整的所有参数创建值。
第三种方法是完全跳过参数对象并使用您的grid_*()函数和拨号函数创建网格。
第四种方式是完全跳过拨号功能,自己创建数据框。我发现tidyr::crossing() 是grid_regular() 的有用替代品。当您使用整数参数和不受益于转换的参数时,这种方式会容易得多。
library(tidymodels)
model <- linear_reg(
mode = "regression",
engine = "glmnet",
penalty = tune()
)
rec_cars <- recipe(mpg ~ ., data = mtcars)
wkf <- workflow() %>%
add_recipe(rec_cars) %>%
add_model(model)
# Option 1: using parameters() on workflow
wkf_new_param_space <- wkf %>%
parameters() %>%
update(penalty = penalty(range = c(-5, 5)))
wkf_new_param_space %>%
grid_regular(levels = 10)
#> # A tibble: 10 × 1
#> penalty
#> <dbl>
#> 1 0.00001
#> 2 0.000129
#> 3 0.00167
#> 4 0.0215
#> 5 0.278
#> 6 3.59
#> 7 46.4
#> 8 599.
#> 9 7743.
#> 10 100000
# Option 2: Using parameters() on list
my_params <- parameters(
list(
penalty(range = c(-5, 5))
)
)
my_params %>%
grid_regular(levels = 10)
#> # A tibble: 10 × 1
#> penalty
#> <dbl>
#> 1 0.00001
#> 2 0.000129
#> 3 0.00167
#> 4 0.0215
#> 5 0.278
#> 6 3.59
#> 7 46.4
#> 8 599.
#> 9 7743.
#> 10 100000
# Option 3: Use grid_*() with dials objects directly
grid_regular(
penalty(range = c(-5, 5)),
levels = 10
)
#> # A tibble: 10 × 1
#> penalty
#> <dbl>
#> 1 0.00001
#> 2 0.000129
#> 3 0.00167
#> 4 0.0215
#> 5 0.278
#> 6 3.59
#> 7 46.4
#> 8 599.
#> 9 7743.
#> 10 100000
# Option 4: Create grid values manually
tidyr::crossing(
penalty = 10 ^ seq(-5, 5, length.out = 10)
)
#> # A tibble: 10 × 1
#> penalty
#> <dbl>
#> 1 0.00001
#> 2 0.000129
#> 3 0.00167
#> 4 0.0215
#> 5 0.278
#> 6 3.59
#> 7 46.4
#> 8 599.
#> 9 7743.
#> 10 100000
由reprex package (v2.0.1) 于 2021-08-17 创建