Hyperopt

Distributed Asynchronous Hyperparameter Optimization in Python

What is Hyperopt?

hyperopt is a Python library for optimizing over awkward search spaces with real-valued, discrete, and conditional dimensions.

# define an objective function
def objective(args):
    case, val = args
    if case == 'case 1':
        return val
    else:
        return val ** 2

# define a search space
from hyperopt import hp
space = hp.choice('a',
    [
        ('case 1', 1 + hp.lognormal('c1', 0, 1)),
        ('case 2', hp.uniform('c2', -10, 10))
    ])

# minimize the objective over the space
from hyperopt import fmin, tpe
best = fmin(objective, space, algo=tpe.suggest, max_evals=100)

print best
# -> {'a': 1, 'c2': 0.01420615366247227}
print hyperopt.space_eval(space, best)
# -> ('case 2', 0.01420615366247227}

Algorithms

Currently two algorithms are implemented in hyperopt:

Hyperopt has been designed to accommodate Bayesian optimization algorithms based on Gaussian processes and regression trees, but these are not currently implemented.

All algorithms can be run either serially, or in parallel by communicating via MongoDB.

Installation

User installation:

pip install hyperopt

Developer installation:

git clone https://github.com/jaberg/hyperopt.git
(cd hyperopt && python setup.py develop)
(cd hyperopt && nosetests)

For more information see Installation Notes.

Documentation

Documentation is currently hosted on the wiki, but here are some quick links to the most relevant pages:

Examples

See projects using hyperopt on the wiki.