Learn R Programming

mlr3tuning

Package website: release | dev

mlr3tuning is the hyperparameter optimization package of the mlr3 ecosystem. It features highly configurable search spaces via the paradox package and finds optimal hyperparameter configurations for any mlr3 learner. mlr3tuning works with several optimization algorithms e.g. Random Search, Iterated Racing, Bayesian Optimization (in mlr3mbo) and Hyperband (in mlr3hyperband). Moreover, it can automatically optimize learners and estimate the performance of optimized models with nested resampling. The package is built on the optimization framework bbotk.

Extension packages

mlr3tuning is extended by the following packages.

  • mlr3tuningspaces is a collection of search spaces from scientific articles for commonly used learners.
  • mlr3hyperband adds the Hyperband and Successive Halving algorithm.
  • mlr3mbo adds Bayesian Optimization methods.

Resources

There are several sections about hyperparameter optimization in the mlr3book.

The gallery features a collection of case studies and demos about optimization.

The cheatsheet summarizes the most important functions of mlr3tuning.

Installation

Install the last release from CRAN:

install.packages("mlr3tuning")

Install the development version from GitHub:

remotes::install_github("mlr-org/mlr3tuning")

Examples

We optimize the cost and gamma hyperparameters of a support vector machine on the Sonar data set.

library("mlr3verse")

learner = lrn("classif.svm",
  cost  = to_tune(1e-5, 1e5, logscale = TRUE),
  gamma = to_tune(1e-5, 1e5, logscale = TRUE),
  kernel = "radial",
  type = "C-classification"
)

We construct a tuning instance with the ti() function. The tuning instance describes the tuning problem.

instance = ti(
  task = tsk("sonar"),
  learner = learner,
  resampling = rsmp("cv", folds = 3),
  measures = msr("classif.ce"),
  terminator = trm("none")
)
instance
## <TuningInstanceSingleCrit>
## * State:  Not optimized
## * Objective: <ObjectiveTuning:classif.svm_on_sonar>
## * Search Space:
##       id    class     lower    upper nlevels
## 1:  cost ParamDbl -11.51293 11.51293     Inf
## 2: gamma ParamDbl -11.51293 11.51293     Inf
## * Terminator: <TerminatorNone>

We select a simple grid search as the optimization algorithm.

tuner = tnr("grid_search", resolution = 5)
tuner
## <TunerGridSearch>: Grid Search
## * Parameters: resolution=5, batch_size=1
## * Parameter classes: ParamLgl, ParamInt, ParamDbl, ParamFct
## * Properties: dependencies, single-crit, multi-crit
## * Packages: mlr3tuning

To start the tuning, we simply pass the tuning instance to the tuner.

tuner$optimize(instance)
##        cost     gamma learner_param_vals  x_domain classif.ce
## 1: 5.756463 -5.756463          <list[4]> <list[2]>  0.1637681

The tuner returns the best hyperparameter configuration and the corresponding measured performance.

The archive contains all evaluated hyperparameter configurations.

as.data.table(instance$archive)[, .(cost, gamma, classif.ce, batch_nr, resample_result)]
##           cost      gamma classif.ce batch_nr  resample_result
##  1:  -5.756463   5.756463  0.4665977        1 <ResampleResult>
##  2:   5.756463  -5.756463  0.1637681        2 <ResampleResult>
##  3:  11.512925   5.756463  0.4665977        3 <ResampleResult>
##  4:   5.756463  11.512925  0.4665977        4 <ResampleResult>
##  5: -11.512925 -11.512925  0.4665977        5 <ResampleResult>
## ---                                                           
## 21:  -5.756463  -5.756463  0.4665977       21 <ResampleResult>
## 22:  11.512925  11.512925  0.4665977       22 <ResampleResult>
## 23: -11.512925  11.512925  0.4665977       23 <ResampleResult>
## 24:  11.512925  -5.756463  0.1637681       24 <ResampleResult>
## 25:   0.000000  -5.756463  0.2599034       25 <ResampleResult>

The mlr3viz package visualizes tuning results.

library(mlr3viz)

autoplot(instance, type = "surface")

We fit a final model with optimized hyperparameters to make predictions on new data.

learner$param_set$values = instance$result_learner_param_vals
learner$train(tsk("sonar"))

Copy Link

Version

Install

install.packages('mlr3tuning')

Monthly Downloads

5,561

Version

0.20.0

License

LGPL-3

Issues

Pull Requests

Stars

Forks

Maintainer

Marc Becker

Last Published

March 5th, 2024

Functions in mlr3tuning (0.20.0)

as_search_space

Convert to a Search Space
ArchiveTuning

Class for Logging Evaluated Hyperparameter Configurations
AutoTuner

Class for Automatic Tuning
ContextEval

Evaluation Context
TuningInstanceMultiCrit

Class for Multi Criteria Tuning
TunerFromOptimizer

TunerFromOptimizer
TuningInstanceSingleCrit

Class for Single Criterion Tuning
Tuner

Class for Tuning Algorithms
CallbackTuning

Create Tuning Callback
ObjectiveTuning

Class for Tuning Objective
mlr3tuning.backup

Backup Benchmark Result Callback
auto_tuner

Function for Automatic Tuning
callback_tuning

Create Tuning Callback
mlr_tuners

Dictionary of Tuners
extract_inner_tuning_archives

Extract Inner Tuning Archives
mlr3tuning.early_stopping

Early Stopping Callback
mlr3tuning-package

mlr3tuning: Hyperparameter Optimization for 'mlr3'
mlr_tuners_cmaes

Hyperparameter Tuning with Covariance Matrix Adaptation Evolution Strategy
mlr3tuning.measures

Measure Callback
extract_inner_tuning_results

Extract Inner Tuning Results
mlr_tuners_design_points

Hyperparameter Tuning with Design Points
ti

Syntactic Sugar for Tuning Instance Construction
mlr_tuners_irace

Hyperparameter Tuning with Iterated Racing.
mlr_tuners_grid_search

Hyperparameter Tuning with Grid Search
mlr_tuners_random_search

Hyperparameter Tuning with Random Search
mlr_tuners_gensa

Hyperparameter Tuning with Generalized Simulated Annealing
mlr_tuners_nloptr

Hyperparameter Tuning with Non-linear Optimization
reexports

Objects exported from other packages
tune

Function for Tuning a Learner
tnr

Syntactic Sugar for Tuning Objects Construction
tune_nested

Function for Nested Resampling