0

我正在为 xgboost 模型定义网格grid_latin_hypercube()。我知道mtry超参数应该使用finalize()函数或使用 range 参数手动完成mtry()

假设我有一个包含 10 个变量的数据框:1 个 id、1 个结果、7 个数字预测变量和 1 个具有 10 个相同频率类的分类预测变量,我运行以下代码:

folds <- vfold_cv(train_data)

xgb_spec <- boost_tree(
  trees = 2000,
  mtry = tune(),
) %>% 
  set_mode('regression') %>% 
  set_engine('xgboost')

xgb_grid <- grid_latin_hypercube(
  finalize(mtry(), train_data),
  size = 5
)

xgb_rec <- recipe(outcome ~ ., data = train_data) %>% 
  update_role(id, new_role = 'id') %>%
  step_dummy(all_nominal_predictors())

xgb_wflow <- workflow() %>%
  add_model(xgb_spec) %>%
  add_recipe(xgb_rec)

xgb_results <- tune_grid(
  xgb_wflow,
  resamples = folds,
  grid = xgb_grid,
  metrics = metrics_set(rmse),
  control = control_grid(save_pred = TRUE, save_workflow = TRUE)
)

tune假设网格超参数是使用具有 10 个变量的数据框完成的,如何处理由配方生成的新预测变量集 (9 - 2 + 10 = 17)?

4

1 回答 1

0

手动完成时,您必须运行prep()/bake()循环(参见此处)来生成预处理数据。

于 2022-01-21T20:10:42.333 回答