show_best() displays the top sub-models and their performance estimates.

select_best() finds the tuning parameter combination with the best performance values.

select_by_one_std_err() uses the "one-standard error rule" (Breiman _el at, 1984) that selects the most simple model that is within one standard error of the numerically optimal results.

select_by_pct_loss() selects the most simple model whose loss of performance is within some acceptable limit.

## Usage

show_best(x, ...)

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

# S3 method for tune_results
show_best(
x,
...,
metric = NULL,
eval_time = NULL,
n = 5,
call = rlang::current_env()
)

select_best(x, ...)

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

# S3 method for tune_results
select_best(x, ..., metric = NULL, eval_time = NULL)

select_by_pct_loss(x, ...)

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

# S3 method for tune_results
select_by_pct_loss(x, ..., metric = NULL, eval_time = NULL, limit = 2)

select_by_one_std_err(x, ...)

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

# S3 method for tune_results
select_by_one_std_err(x, ..., metric = NULL, eval_time = NULL)

## Arguments

x

The results of tune_grid() or tune_bayes().

...

For select_by_one_std_err() and select_by_pct_loss(), this argument is passed directly to dplyr::arrange() so that the user can sort the models from most simple to most complex. That is, for a parameter p, pass the unquoted expression p if smaller values of p indicate a simpler model, or desc(p) if larger values indicate a simpler model. At least one term is required for these two functions. See the examples below.

metric

A character value for the metric that will be used to sort the models. (See https://yardstick.tidymodels.org/articles/metric-types.html for more details). Not required if a single metric exists in x. If there are multiple metric and none are given, the first in the metric set is used (and a warning is issued).

eval_time

A single numeric time point where dynamic event time metrics should be chosen (e.g., the time-dependent ROC curve, etc). The values should be consistent with the values used to create x. The NULL default will automatically use the first evaluation time used by x.

n

An integer for the number of top results/rows to return.

call

The call to be shown in errors and warnings.

limit

The limit of loss of performance that is acceptable (in percent units). See details below.

## Value

A tibble with columns for the parameters. show_best() also includes columns for performance metrics.

## Details

For percent loss, suppose the best model has an RMSE of 0.75 and a simpler model has an RMSE of 1. The percent loss would be (1.00 - 0.75)/1.00 * 100, or 25 percent. Note that loss will always be non-negative.

## References

Breiman, Leo; Friedman, J. H.; Olshen, R. A.; Stone, C. J. (1984). Classification and Regression Trees. Monterey, CA: Wadsworth.

## Examples

data("example_ames_knn")

show_best(ames_iter_search, metric = "rmse")
#> # A tibble: 5 × 12
#>       K weight_func dist_power   lon   lat .metric .estimator   mean     n
#>   <int> <chr>            <dbl> <int> <int> <chr>   <chr>       <dbl> <int>
#> 1    33 triweight        0.511    10     3 rmse    standard   0.0728    10
#> 2     5 rank             0.411     2     7 rmse    standard   0.0740    10
#> 3    21 triweight        0.909    10     4 rmse    standard   0.0742    10
#> 4    21 cos              0.626     1     4 rmse    standard   0.0746    10
#> 5    19 inv              0.117     1     4 rmse    standard   0.0758    10
#> # ℹ 3 more variables: std_err <dbl>, .config <chr>, .iter <int>

select_best(ames_iter_search, metric = "rsq")
#> # A tibble: 1 × 6
#>       K weight_func dist_power   lon   lat .config
#>   <int> <chr>            <dbl> <int> <int> <chr>
#> 1    33 triweight        0.511    10     3 Preprocessor10_Model1

# To find the least complex model within one std error of the numerically
# optimal model, the number of nearest neighbors are sorted from the largest
# number of neighbors (the least complex class boundary) to the smallest
# (corresponding to the most complex model).

select_by_one_std_err(ames_grid_search, metric = "rmse", desc(K))
#> # A tibble: 1 × 6
#>       K weight_func dist_power   lon   lat .config
#>   <int> <chr>            <dbl> <int> <int> <chr>
#> 1    33 triweight        0.511    10     3 Preprocessor10_Model1

# Now find the least complex model that has no more than a 5% loss of RMSE:
select_by_pct_loss(
ames_grid_search,
metric = "rmse",
limit = 5, desc(K)
)
#> # A tibble: 1 × 6
#>       K weight_func dist_power   lon   lat .config
#>   <int> <chr>            <dbl> <int> <int> <chr>
#> 1    33 triweight        0.511    10     3 Preprocessor10_Model1