Skip to content

fit_best() takes the results from model tuning and fits it to the training set using tuning parameters associated with the best performance.

Usage

fit_best(x, ...)

# S3 method for default
fit_best(x, ...)

# S3 method for tune_results
fit_best(x, metric = NULL, parameters = NULL, verbose = FALSE, ...)

Arguments

x

The results of class tune_results (coming from functions such as tune_grid(), tune_bayes(), etc). The control option save_workflow = TRUE should have been used.

...

Not currently used.

metric

A character string (or NULL) for which metric to optimize. If NULL, the first metric is used.

parameters

An optional 1-row tibble of tuning parameter settings, with a column for each tuning parameter. This tibble should have columns for each tuning parameter identifier (e.g. "my_param" if tune("my_param") was used). If NULL, this argument will be set to select_best(metric).

verbose

A logical for printing logging.

Value

A fitted workflow.

Details

This function is a shortcut for the manual steps of:


  best_param <- select_best(tune_results, metric) # or other `select_*()`
  wflow <- finalize_workflow(wflow, best_param)  # or just `finalize_model()`
  wflow_fit <- fit(wflow, data_set)

The data used for the fit are taken from the splits column. If the split column was from a validation split, the combined training and validation sets are used.

In comparison to last_fit(), that function requires a finalized model, fits the model on the training set defined by rsample::initial_split(), and computes metrics from the test set.

Examples

library(recipes)
library(rsample)
library(parsnip)
library(dplyr)

data(meats, package = "modeldata")
meats <- meats %>% select(-water, -fat)

set.seed(1)
meat_split <- initial_split(meats)
meat_train <- training(meat_split)
meat_test  <- testing(meat_split)

set.seed(2)
meat_rs <- vfold_cv(meat_train, v = 10)

pca_rec <-
  recipe(protein ~ ., data = meat_train) %>%
  step_normalize(all_numeric_predictors()) %>%
  step_pca(all_numeric_predictors(), num_comp = tune())

knn_mod <- nearest_neighbor(neighbors = tune()) %>% set_mode("regression")

ctrl <- control_grid(save_workflow = TRUE)

set.seed(128)
knn_pca_res <-
  tune_grid(knn_mod, pca_rec, resamples = meat_rs, grid = 10, control = ctrl)

knn_fit <- fit_best(knn_pca_res, verbose = TRUE)
#> Using rmse as the metric, the optimal parameters were:
#>   neighbors: 6
#>   num_comp:  4
#> 
#>  Fitting using 161 data points...
#>  Done.
predict(knn_fit, meat_test)
#> # A tibble: 54 × 1
#>    .pred
#>    <dbl>
#>  1  19.7
#>  2  20.1
#>  3  15.0
#>  4  13.2
#>  5  19.6
#>  6  21.1
#>  7  19.9
#>  8  18.5
#>  9  19.6
#> 10  17.9
#> # ℹ 44 more rows