`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.

## 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
```