我正在为 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)?