Quick search


version 0.5.1

Sequential model-based optimization toolbox.

People: The scikit-optimize contributors



|Travis Status| |CircleCI Status| |binder| |gitter| |Zenodo DOI|


Scikit-Optimize, or ``skopt``, is a simple and efficient library to
minimize (very) expensive and noisy black-box functions. It implements
several methods for sequential model-based optimization. ``skopt`` aims
to be accessible and easy to use in many contexts.

The library is built on top of NumPy, SciPy and Scikit-Learn.

We do not perform gradient-based optimization. For gradient-based
optimization algorithms look at
`here <>`_.

.. figure::
:alt: Approximated objective

Approximated objective function after 50 iterations of ``gp_minimize``.
Plot made using ``skopt.plots.plot_objective``.

Important links

- Static documentation - `Static
documentation <>`__
- Example notebooks - can be found in the
`examples directory <>`_.
- Issue tracker -
- Releases -


The latest released version of scikit-optimize is v0.5.1, which you can install

pip install scikit-optimize

In addition there is a `conda-forge <>`_ package
of scikit-optimize:

conda install -c conda-forge scikit-optimize

Using conda-forge is probably the easiest way to install scikit-optimize on

Getting started

Find the minimum of the noisy function ``f(x)`` over the range
``-2 < x < 2`` with ``skopt``:

.. code:: python

import numpy as np
from skopt import gp_minimize

def f(x):
return (np.sin(5 * x[0]) * (1 - np.tanh(x[0] ** 2)) +
np.random.randn() * 0.1)

res = gp_minimize(f, [(-2.0, 2.0)])

For more control over the optimization loop you can use the ``skopt.Optimizer``

.. code:: python

from skopt import Optimizer

opt = Optimizer([(-2.0, 2.0)])

for i in range(20):
suggested = opt.ask()
y = f(suggested)
opt.tell(suggested, y)
print(\'iteration:\', i, suggested, y)

Read our `introduction to bayesian
optimization <>`__
and the other
`examples <>`__.


The library is still experimental and under heavy development. Checkout
the `next
milestone <>`__
for the plans for the next release or look at some `easy
issues <>`__
to get started contributing.

The development version can be installed through:


git clone
cd scikit-optimize
pip install -e.

Run all tests by executing ``pytest`` in the top level directory.

To only run the subset of tests with short run time, you can use ``pytest -m \'fast_test\'`` (``pytest -m \'slow_test\'`` is also possible). To exclude all slow running tests try ``pytest -m \'not slow_test\'``.

This is implemented using pytest `attributes <>`__. If a tests runs longer than 1 second, it is marked as slow, else as fast.

All contributors are welcome!

Making a Release

The release procedure is almost completely automated. By tagging a new release
travis will build all required packages and push them to PyPI. To make a release
create a new issue and work through the following checklist:

* update the version tag in ````
* update the version tag in ````
* update the version tag mentioned in the README
* check if the dependencies in ```` are valid or need unpinning
* check that the ```` is up to date
* did the last build of master succeed?
* create a `new release <>`__
* ping `conda-forge <>`__

Before making a release we usually create a release candidate. If the next
release is v0.X then the release candidate should be tagged v0.Xrc1 in
```` and ````. Mark a release candidate as a \"pre-release\"
on GitHub when you tag it.

Commercial support

Feel free to `get in touch <>`_ if you need commercial
support or would like to sponsor development. Resources go towards paying
for additional work by seasoned engineers and researchers.

Made possible by

The scikit-optimize project was made possible with the support of

.. image::
:alt: Wild Tree Tech

.. image::
:alt: NYU Center for Data Science

.. image::
:alt: NSF

.. image::
:alt: Northrop Grumman

If your employer allows you to work on scikit-optimize during the day and would like
recognition, feel free to add them to the \"Made possible by\" list.

.. |Travis Status| image::
.. |CircleCI Status| image::
.. |Logo| image::
.. |binder| image::
.. |gitter| image::
.. |Zenodo DOI| image::



You can download the latest distribution from PyPI here:

Using pip

You can install scikit-optimize for yourself from the terminal by running:

pip install --user scikit-optimize

If you want to install it for all users on your machine, do:

pip install scikit-optimize
On Linux, do sudo pip install scikit-optimize.

If you don't yet have the pip tool, you can get it following these instructions.

This package was discovered in PyPI.