A new R6 and much more modular implementation for single- and multicriteria Bayesian optimization.
mlr3mbo
is built modular relying on the following
R6 classes:
Surrogate
: Surrogate ModelAcqFunction
: Acquisition FunctionAcqOptimizer
: Acquisition Function Optimizer
Based on these, Bayesian optimization loops can be written, see, e.g.,
bayesopt_ego
for sequential single objective BO.
mlr3mbo
also provides an OptimizerMbo
class behaving like any other
Optimizer
from the bbotk
package.
The respective TunerMbo
is part of the
mlr3tuning package.
mlr3mbo
uses sensible defaults for the Surrogate
, AcqFunction
,
AcqOptimizer
, and even the loop function. See ?mbo_defaults
for more
details.
Minimize y = x^2
via sequential singlecriteria BO using a GP as
surrogate and EI optimized via random search as aquisition function:
set.seed(1)
library(bbotk)
library(mlr3)
library(mlr3mbo)
library(paradox)
library(mlr3learners)
obfun = ObjectiveRFun$new(
fun = function(xs) list(y = xs$x ^ 2),
domain = ps(x = p_dbl(lower = -5, upper = 5)),
codomain = ps(y = p_dbl(tags = "minimize"))
)
terminator = trm("evals", n_evals = 10)
instance = OptimInstanceSingleCrit$new(
objective = obfun,
terminator = terminator
)
design = generate_design_lhs(obfun$domain, 4)$data
instance$eval_batch(design)
surrogate = SurrogateLearner$new(lrn("regr.km", control = list(trace = FALSE)))
acqfun = AcqFunctionEI$new()
acqopt = AcqOptimizer$new(
opt("random_search", batch_size = 100),
terminator = trm("evals", n_evals = 100)
)
optimizer = opt("mbo",
loop_function = bayesopt_ego,
surrogate = surrogate,
acq_function = acqfun,
acq_optimizer = acqopt
)
optimizer$optimize(instance)
## x x_domain y
## 1: 0.01948605 <list[1]> 0.000379706
set.seed(1)
library(mlr3)
library(mlr3tuning)
task = tsk("pima")
learner = lrn("classif.rpart", cp = to_tune(lower = 1e-04, upper = 1e-1, logscale = TRUE))
instance = tune(
method = "mbo",
task = task,
learner = learner,
resampling = rsmp("holdout"),
measure = msr("classif.ce"),
term_evals = 10
)
instance$result
## cp learner_param_vals x_domain classif.ce
## 1: -3.438787 <list[2]> <list[1]> 0.2039062