Bayesian optimization for people who just want the minimum
A scikit-friendly wrapper that trades gradient descent for Gaussian processes when your objective function is expensive, noisy, or both.

What it does
Scikit-Optimize (skopt) minimizes black-box functions that are costly to evaluate or contaminated with noise. It wraps sequential model-based optimization—think Gaussian processes and random forests—into a familiar API that mirrors scipy.optimize. You call gp_minimize() with bounds and a function; it suggests points, learns from results, and iterates toward a minimum without ever asking for a gradient.
The interesting bit
The library deliberately stays in the same conceptual neighborhood as scikit-learn: NumPy/SciPy foundations, ask()/tell() interface for manual control, and built-in plotting via skopt.plots. The README’s own example is a one-liner minimizing a noisy sinusoid. That simplicity is the point—Bayesian optimization can be algorithmically dense, but skopt treats it as infrastructure, not research code.
Key highlights
- Drop-in style:
gp_minimize(f, [bounds])or step through iterations withOptimizer.ask()/Optimizer.tell() - Built on NumPy, SciPy, and scikit-learn; no external C++ dependencies to wrestle with
- Optional plotting support (
pip install 'scikit-optimize[plots]') for visualizing acquisition functions and convergence - Conda-forge package available; Windows installation noted as “probably the easiest” path
- Test suite split into fast (<1s) and slow markers via pytest attributes
Caveats
- Explicitly labeled “still experimental and under heavy development” by the maintainers
- No gradient-based methods: if your function is smooth and cheap,
scipy.optimizeis the documented alternative - Python ≥3.6 and scikit-learn ≥0.20 required; dependency versions are pinned conservatively
Verdict
Worth a look if you’re tuning hyperparameters or optimizing simulations where each evaluation costs minutes or hours. Skip it if you need production-grade stability today or your problem is low-dimensional and gradient-friendly—scipy already won that fight.