Skip to main content

python interface to the hyperparameter optimization tool SMAC.

Project description

Simple python wrapper to SMAC, a versatile tool for optimizing algorithm parameters.

fmin(objective, x0, xmin, xmax, x0_int, xmin_int, xmax_int, xcategorical, params)
   min_x f(x) s.t. xmin < x < xmax

 objective: The objective function that should be optimized.

Installation

Pip

pip install pysmac

Manual

python setup.py install

Example usage

Let’s take for example the Branin function. (Note that the branin function is not the ideal use case for SMAC, which is designed to be a global optimization tool for costly functions. That said, it’ll serve the purpose of checking that everything is working.)

import numpy as np

def branin(x):
    b = (5.1 / (4.*np.pi**2))
    c = (5. / np.pi)
    t = (1. / (8.*np.pi))
    return 1.*(x[1]-b*x[0]**2+c*x[0]-6.)**2+10.*(1-t)*np.cos(x[0])+10.

For x1 ∈ [-5, 10], x2 ∈ [0, 15] the function reaches a minimum value of: 0.397887.

Note: fmin accepts any function that has a parameter called x (the input array) and returns an objective value.

from pysmac.optimize import fmin

xmin, fval = fmin(branin, x0=(0,0),xmin=(-5, 0), xmax=(10, 15), max_evaluations=5000)

As soon as the evaluations are finished, we can check the output:

>>> xmin
{'x': array([ 3.14305644,  2.27827543])}

>>> fval
0.397917

Let’s run the objective function with the found parameters:

>>> branin(**xmin)
0.397917

License

SMAC is free for academic & non-commercial usage. Please contact Frank Hutter to discuss obtaining a license for commercial purposes.

Advanced

Custom arguments to the objective function:

Note: make sure there is no naming collission with the parameter names and the custom arguments.

def minfunc(x, custom_arg1, custom_arg2):
    print "custom_arg1:", custom_arg1
    print "custom_arg2:", custom_arg2
    return 1


xmin, fval = fmin(minfunc, x0=(0,0),xmin=(-5, 0), xmax=(10, 15),
                  max_evaluations=5000,
                  custom_args={"custom_arg1": "test",
                               "custom_arg2": 123})

Integer parameters

Integer parameters can be encoded as follows:

def minfunc(x, x_int):
    print "x: ", x
    print "x_int: ", x_int
    return 1.

xmin, fval = fmin(minfunc,
                  x0=(0,0), xmin=(-5, 0), xmax=(10, 15),
                  x0_int=(0,0), xmin_int=(-5, 0), xmax_int=(10, 15),
                  max_evaluations=5000)

Categorical parameters

Categorical parameters can be specified as a dictionary of lists of values they can take on, e.g.:

categorical_params = {"param1": [1,2,3,4,5,6,7],
                      "param2": ["string1", "string2", "string3"]}

def minfunc(x_categorical):
    print "param1: ", x_categorical["param1"]
    print "param2: ", x_categorical["param2"]
    return 1.

xmin, fval = fmin(minfunc,
                  x_categorical=categorical_params,
                  max_evaluations=5000)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pysmac-0.8.tar.gz (9.5 MB view details)

Uploaded Source

File details

Details for the file pysmac-0.8.tar.gz.

File metadata

  • Download URL: pysmac-0.8.tar.gz
  • Upload date:
  • Size: 9.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pysmac-0.8.tar.gz
Algorithm Hash digest
SHA256 d9b77514e0f8cfefd53919c307043c9b25e7ac1bc6e8b46ec6ba398ea11e0092
MD5 ce0cfff51564c1645f6d3bf633bfdf5b
BLAKE2b-256 55673489511f4f335f5dc4db8aa3d19968ca7470dfd9b50e4eea38c570be9538

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page