Home/Developer Tools/scikit-optimize
scikit-optimize logo

scikit-optimize

archivedEnrichment pending
scikit-optimize/scikit-optimize

Sequential model-based optimization with a `scipy.optimize` interface

GraphCanon updated today · GitHub synced today

2.8k
Stars
559
Forks
318
Open issues
3
Watchers
2y
Last push
Python BSD-3-ClauseCreated Mar 20, 2016

Trust & integrity

Full report
Maintenance
Archived (869d since push)
As of today · Source: github_public_v1
Provenance
Not a fork · Organization account
As of today · Source: github_public_v1
Security (OSV)
17 low (17 low)
As of today · Source: osv@v1

Public GitHub metadata and optional OSV dependency scans. Signals, not a guarantee. Trust methodology.

Overview

Sequential model-based optimization with a `scipy.optimize` interface

Capability facts

Languages
python

Source: github.language+pyproject.toml · Jul 11, 2026

Categories

Compatibility

Sourced claims from the README excerpt - not unsourced marketing copy.

Python runtimePython

Source: README excerpt (regex_v1, Jul 11, 2026)

- Releases - https://pypi.python.org/pypi/scikit-optimize
Source link

Tags

README

|Logo|

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

Scikit-Optimize

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 scipy.optimize here <http://docs.scipy.org/doc/scipy/reference/optimize.html>_.

.. figure:: https://github.com/scikit-optimize/scikit-optimize/blob/master/media/bo-objective.png :alt: Approximated objective

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

Important links

Install

scikit-optimize requires

  • Python >= 3.6
  • NumPy (>= 1.13.3)
  • SciPy (>= 0.19.1)
  • joblib (>= 0.11)
  • scikit-learn >= 0.20
  • matplotlib >= 2.0.0

You can install the latest release with: ::

pip install scikit-optimize

This installs an essential version of scikit-optimize. To install scikit-optimize with plotting functionality, you can instead do: ::

pip install 'scikit-optimize[plots]'

This will install matplotlib along with scikit-optimize.

In addition there is a conda-forge <https://conda-forge.org/>_ package of scikit-optimize: ::

conda install -c conda-forge scikit-optimize

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

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 class:

.. 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 <https://scikit-optimize.github.io/stable/auto_examples/bayesian-optimization.html>__ and the other examples_.

Development

The library is still experimental and under heavy development. Checkout the next milestone <https://github.com/scikit-optimize/scikit-optimize/milestones>__ for the plans for the next release or look at some easy issues <https://github.com/scikit-optimize/scikit-optimize/issues?q=is%3Aissue+is%3Aopen+label%3AEasy>__ to get started contributing.

The development version can be installed through:

::

git clone https://github.com/scikit-optimize/scikit-optimize.git
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 <https://docs.pytest.org/en/latest/mark.html>__. 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 iss