+
Skip to content

mlr-org/mlr3mbo

 
 

Repository files navigation

mlr3mbo

A new R6 and much more modular implementation for single- and multicriteria Bayesian optimization.

tic CRANstatus StackOverflow Mattermost

Design

mlr3mbo is built modular relying on the following R6 classes:

  • Surrogate: Surrogate Model
  • AcqFunction: Acquisition Function
  • AcqOptimizer: 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.

API

Robustness

Simple Optimization Example

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

Simple Tuning Example Using Defaults

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
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载