Skip to content
Branch: master
Go to file
Code

Latest commit

ar-nowaczynski committed 3c02a6c Jul 11, 2020
* Installation before Usage

* Rename spoint_list to spoints

* Increment version to 0.1.4

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

SpaceOpt: optimize discrete search space via gradient boosting regression

Python PyPI version license

SpaceOpt is an optimization algorithm for discrete search spaces that uses gradient boosting regression to find the most promising candidates for evaluation by predicting their evaluation score. Training data is gathered sequentially and random or human-guided exploration can be easily incorporated at any stage.

Installation

$ pip install spaceopt

Usage

If you have discrete search space, for example:

search_space = {
    'a': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],  # list of ordered numbers: ints
    'b': [-4.4, -2.5, -1.5, 0.0, 3.7],    # list of ordered numbers: floats
    'c': [128, 256, 512, 1024],           # another list of ordered numbers
    'd': ['typeX', 'typeY', 'typeZ'],     # categorical variable
    'e': [True, False],                   # boolean variable
    # ... (add as many as you need)
}

and if you can evaluate points from it:

spoint = {'a': 4, 'b': 0.0, 'c': 512, 'd': 'typeZ', 'e': False}
y = evaluation_function(spoint)
print(y)  # 0.123456

and if you want to find points that maximize or minimize your evaluation function, in a better way than random search, then use SpaceOpt:

from spaceopt import SpaceOpt

spaceopt = SpaceOpt(search_space=search_space,
                    target_name='y',
                    objective='min')     # or 'max'

for iteration in range(200):

    if iteration < 20:
        spoint = spaceopt.get_random()   # exploration
    else:
        spoint = spaceopt.fit_predict()  # exploitation

    spoint['y'] = evaluation_function(spoint)
    spaceopt.append_evaluated_spoint(spoint)

More examples here.

Advanced

  • get multiple points by setting num_spoints:
spoints = spaceopt.get_random(num_spoints=2)
# or
spoints = spaceopt.fit_predict(num_spoints=5)
  • control exploitation behaviour by adjusting sample_size (default=10000), which is the number of candidates sampled for ranking (decreasing sample_size increses exploration):
spoint = spaceopt.fit_predict(sample_size=100)
  • add your own evaluation points to SpaceOpt:
my_spoint = {'a': 8, 'b': -4.4, 'c': 256, 'd': 'typeY', 'e': False}
my_spoint['y'] = evaluation_function(my_spoint)
spaceopt.append_evaluated_spoint(my_spoint)
  • be creative about how to use SpaceOpt;

  • learn more by reading the code, there are only 3 classes: SpaceOpt, Space and Variable.

License

MIT License (see LICENSE).

About

No description, website, or topics provided.

Resources

License

Languages

You can’t perform that action at this time.