Hyperparameter Tuning with Covariance Matrix Adaptation Evolution Strategy
Source:R/TunerCmaes.R
mlr_tuners_cmaes.Rd
Subclass that implements CMA-ES calling adagio::pureCMAES()
from package adagio.
Dictionary
This Tuner can be instantiated via the dictionary
mlr_tuners or with the associated sugar function tnr()
:
TunerCmaes$new()
mlr_tuners$get("cmaes")
tnr("cmaes")
Parameters
sigma
numeric(1)
start_values
character(1)
Createrandom
start values or based oncenter
of search space? In the latter case, it is the center of the parameters before a trafo is applied.
For the meaning of the control parameters, see adagio::pureCMAES()
. Note
that we have removed all control parameters which refer to the termination of
the algorithm and where our terminators allow to obtain the same behavior.
Progress Bars
$optimize()
supports progress bars via the package progressr
combined with a Terminator. Simply wrap the function in
progressr::with_progress()
to enable them. We recommend to use package
progress as backend; enable with progressr::handlers("progress")
.
Logging
All Tuners use a logger (as implemented in lgr) from package
bbotk.
Use lgr::get_logger("bbotk")
to access and control the logger.
Optimizer
This Tuner is based on bbotk::OptimizerCmaes which can be applied on any black box optimization problem. See also the documentation of bbotk.
See also
Package mlr3hyperband for hyperband tuning.
Other Tuner:
mlr_tuners_design_points
,
mlr_tuners_gensa
,
mlr_tuners_grid_search
,
mlr_tuners_irace
,
mlr_tuners_nloptr
,
mlr_tuners_random_search
,
mlr_tuners
Super classes
mlr3tuning::Tuner
-> mlr3tuning::TunerFromOptimizer
-> TunerCmaes
Examples
library(data.table)
# retrieve task
task = tsk("pima")
# load learner and set search space
learner = lrn("classif.rpart",
cp = to_tune(1e-04, 1e-1, logscale = TRUE),
minsplit = to_tune(p_dbl(2, 128, trafo = as.integer)),
minbucket = to_tune(p_dbl(1, 64, trafo = as.integer))
)
# hyperparameter tuning on the pima indians diabetes data set
instance = tune(
method = "cmaes",
task = task,
learner = learner,
resampling = rsmp("holdout"),
measure = msr("classif.ce"),
term_evals = 10)
# best performing hyperparameter configuration
instance$result
#> cp minsplit minbucket learner_param_vals x_domain classif.ce
#> 1: -7.510346 72.06259 14.34832 <list[4]> <list[3]> 0.2851562
# all evaluated hyperparameter configuration
as.data.table(instance$archive)
#> cp minsplit minbucket classif.ce x_domain_cp x_domain_minsplit
#> 1: -6.949432 69.031796 1.000000 0.2890625 0.0009591793 69
#> 2: -7.510346 72.062593 14.348322 0.2851562 0.0005473919 72
#> 3: -2.302585 128.000000 1.000000 0.3203125 0.1000000000 128
#> 4: -4.931336 86.050476 5.029061 0.2890625 0.0072168542 86
#> 5: -9.210340 128.000000 1.000000 0.3242188 0.0001000000 128
#> 6: -3.494726 119.609550 25.662615 0.2851562 0.0303570703 119
#> 7: -6.247934 4.874612 1.000000 0.2890625 0.0019344467 4
#> 8: -3.657932 53.990282 44.564985 0.2851562 0.0257857872 53
#> 9: -2.302585 78.557521 64.000000 0.3203125 0.1000000000 78
#> 10: -4.201757 125.018418 1.000000 0.3203125 0.0149692586 125
#> x_domain_minbucket runtime_learners timestamp batch_nr warnings
#> 1: 1 0.015 2022-05-24 04:26:36 1 0
#> 2: 14 0.014 2022-05-24 04:26:36 2 0
#> 3: 1 0.014 2022-05-24 04:26:37 3 0
#> 4: 5 0.015 2022-05-24 04:26:37 4 0
#> 5: 1 0.014 2022-05-24 04:26:37 5 0
#> 6: 25 0.014 2022-05-24 04:26:37 6 0
#> 7: 1 0.017 2022-05-24 04:26:37 7 0
#> 8: 44 0.014 2022-05-24 04:26:37 8 0
#> 9: 64 0.014 2022-05-24 04:26:37 9 0
#> 10: 1 0.015 2022-05-24 04:26:37 10 0
#> errors resample_result
#> 1: 0 <ResampleResult[22]>
#> 2: 0 <ResampleResult[22]>
#> 3: 0 <ResampleResult[22]>
#> 4: 0 <ResampleResult[22]>
#> 5: 0 <ResampleResult[22]>
#> 6: 0 <ResampleResult[22]>
#> 7: 0 <ResampleResult[22]>
#> 8: 0 <ResampleResult[22]>
#> 9: 0 <ResampleResult[22]>
#> 10: 0 <ResampleResult[22]>
# fit final model on complete data set
learner$param_set$values = instance$result_learner_param_vals
learner$train(task)