Python library for Bayesian Optimization.


Keywords
Bayesian, Optimization, Gaussian, Process
License
GPL-3.0
Install
pip install bolib==0.21.0

Documentation

BOlib

A python library for Bayesian Optimization.

Setup BOlib

  • The following packages must be installed before installing BOlib
# for ptyhon3
apt-get install python3-tk
# or for python2
apt-get install python-tk
  • Create and activate virtualenv (for python2) or venv (for ptyhon3)
# for ptyhon3
python3 -m venv --system-site-packages .env
# or for python2
virtualenv --system-site-packages .env

source .env/bin/activate
  • Upgrade pip
# for ptyhon3
python3 -m pip install --upgrade pip
# or for python2
python -m pip install --upgrade pip
  • Install GPlib package
python -m pip install bolib

Use BOlib

  • Import BOlib to use it in your python script.
import bolib
  • Some well-known objetive functions have been included.
of = bolib.ofs.Branin()

of.evaluate([1.0, 1.0])  # 27.702905548512433
  • To use Bayesian Optimization we need a probabilistic model. In this example we will use Gaussian Processes.
import gplib
import numpy as np

# We initialize data before the first evaluation.

data = {
    'X': np.zeros((2, len(of.get_bounds()))),
    'Y': np.array([[-1.0], [1.0]])
}

model = gplib.GP(
    mean_function=gplib.mea.Constant(data),
    covariance_function=gplib.cov.Sum([
        gplib.cov.SquaredExponential(data, is_ard=True),
        gplib.cov.WhiteNoise(data)
    ]),
    likelihood_function=gplib.lik.Gaussian(),
    inference_method=gplib.inf.ExactGaussian()
)

metric = gplib.me.LML()

fitting_method = gplib.fit.MultiStart(
    obj_fun=metric.fold_measure,
    ls_method="Powell",
    max_fun_call=300,
    max_ls_fun_call=300
)

validation = gplib.val.Full()
  • Bayesian Optimization also needs an acquisition function.
af = bolib.afs.ExpectedImprovement()
  • Finally, we can initialize our optimization model and start the optimization process.
seed = 1

bo = bolib.methods.BayesianOptimization(
    model, fitting_method, validation, af, seed
)

x0 = bolib.util.random_sample(of.get_bounds(), batch_size=15)

bo.minimize(
    of.evaluate, x0,
    bounds=of.get_bounds(),
    tol=1e-7,
    maxiter=of.get_max_eval(),
    disp=True
)
  • BOlib is also Scipy compatible.
import scipy.optimize as spo

result = spo.minimize(
    of.evaluate,
    x0,
    bounds=of.get_bounds(),
    method=bo.minimize,
    tol=1e-7,
    options={
        'maxiter': of.get_max_eval(),
        'disp': True
    }
)
  • There are more examples in examples/ directory. Check them out!

Develop BOlib

  • Download the repository using git
git clone https://gitlab.com/ibaidev/bolib.git
cd bolib
git config user.email 'MAIL'
git config user.name 'NAME'
git config credential.helper 'cache --timeout=300'
git config push.default simple
  • Update API documentation
source ./.env/bin/activate
pip install Sphinx
cd docs/
sphinx-apidoc -f -o ./ ../bolib