Distributed Asynchronous Hyperparameter Optimization in Python
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}
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.
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 is currently hosted on the wiki, but here are some quick links to the most relevant pages:
See projects using hyperopt on the wiki.