Subclass for random search tuning.
The random points are sampled by paradox::generate_design_random()
.
Source
Bergstra J, Bengio Y (2012). “Random Search for Hyper-Parameter Optimization.” Journal of Machine Learning Research, 13(10), 281--305. https://jmlr.csail.mit.edu/papers/v13/bergstra12a.html.
Dictionary
This Tuner can be instantiated via the dictionary
mlr_tuners or with the associated sugar function tnr()
:
TunerRandomSearch$new()
mlr_tuners$get("random_search")
tnr("random_search")
Parallelization
In order to support general termination criteria and parallelization, we
evaluate points in a batch-fashion of size batch_size
. Larger batches mean
we can parallelize more, smaller batches imply a more fine-grained checking
of termination criteria. A batch contains of batch_size
times resampling$iters
jobs.
E.g., if you set a batch size of 10 points and do a 5-fold cross validation, you can
utilize up to 50 cores.
Parallelization is supported via package future (see mlr3::benchmark()
's
section on parallelization for more details).
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::OptimizerRandomSearch which can be applied on any black box optimization problem. See also the documentation of bbotk.
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")
.
See also
Package mlr3hyperband for hyperband tuning.
Other Tuner:
mlr_tuners_cmaes
,
mlr_tuners_design_points
,
mlr_tuners_gensa
,
mlr_tuners_grid_search
,
mlr_tuners_irace
,
mlr_tuners_nloptr
,
mlr_tuners
Super classes
mlr3tuning::Tuner
-> mlr3tuning::TunerFromOptimizer
-> TunerRandomSearch
Examples
# retrieve task
task = tsk("pima")
# load learner and set search space
learner = lrn("classif.rpart", cp = to_tune(1e-04, 1e-1, logscale = TRUE))
# hyperparameter tuning on the pima indians diabetes data set
instance = tune(
method = "random_search",
task = task,
learner = learner,
resampling = rsmp("holdout"),
measure = msr("classif.ce"),
term_evals = 10
)
# best performing hyperparameter configuration
instance$result
#> cp learner_param_vals x_domain classif.ce
#> 1: -5.257886 <list[2]> <list[1]> 0.25
# all evaluated hyperparameter configuration
as.data.table(instance$archive)
#> cp classif.ce x_domain_cp runtime_learners timestamp
#> 1: -5.257886 0.2500000 0.0052063002 0.016 2022-05-24 04:26:47
#> 2: -8.770555 0.2500000 0.0001552374 0.019 2022-05-24 04:26:47
#> 3: -6.671543 0.2500000 0.0012664429 0.015 2022-05-24 04:26:47
#> 4: -6.810536 0.2500000 0.0011021024 0.017 2022-05-24 04:26:47
#> 5: -2.737840 0.2539062 0.0647099983 0.014 2022-05-24 04:26:48
#> 6: -3.311103 0.2539062 0.0364759270 0.013 2022-05-24 04:26:48
#> 7: -8.075119 0.2500000 0.0003111863 0.019 2022-05-24 04:26:48
#> 8: -5.098019 0.2695312 0.0061088380 0.016 2022-05-24 04:26:48
#> 9: -2.744604 0.2539062 0.0642737314 0.016 2022-05-24 04:26:48
#> 10: -8.486713 0.2500000 0.0002061899 0.014 2022-05-24 04:26:48
#> batch_nr warnings errors resample_result
#> 1: 1 0 0 <ResampleResult[22]>
#> 2: 2 0 0 <ResampleResult[22]>
#> 3: 3 0 0 <ResampleResult[22]>
#> 4: 4 0 0 <ResampleResult[22]>
#> 5: 5 0 0 <ResampleResult[22]>
#> 6: 6 0 0 <ResampleResult[22]>
#> 7: 7 0 0 <ResampleResult[22]>
#> 8: 8 0 0 <ResampleResult[22]>
#> 9: 9 0 0 <ResampleResult[22]>
#> 10: 10 0 0 <ResampleResult[22]>
# fit final model on complete data set
learner$param_set$values = instance$result_learner_param_vals
learner$train(task)