automl / RoBO

RoBO: a Robust Bayesian Optimization framework
BSD 3-Clause "New" or "Revised" License
481 stars 133 forks source link

Possible collaborator #54

Closed edublancas closed 7 years ago

edublancas commented 7 years ago

Hi, congrats for the great work you guys have done here!

What are your plans for this package? There are a lot of bayesian optimization packages out there but they seem to be dead.

I would personally like to use this for some projects and would be happy to contribute to the project.

These are some of the things I would like to work on:

Let me know if you are interested.

aaronkl commented 7 years ago

Hi, thanks for using RoBO and thank for the positive feedback. The idea of RoBO is to have an open source library that contains all important state-of-the-art Bayesian optimization methods and supports a simple interface such that people can easily use them either for their own projects or as baselines to compare to their new BO methods. All the points you mentioned are also on our todo list and any help is highly appreciated. Let me know if you need any help or if you have more questions. cheers Aaron

edublancas commented 7 years ago

Ok, so I guess none of the points mentioned above are in conflict with the roadmap you have, I can surely work on those.

I have another suggestion but that would represent important changes in the current interface. I would like to save partial results in a database (in case something fails or maybe just to resume a job later). Some packages I found implement this using MongoDB but they offer little personalization.

I think the solution would be to provide results from the optimization on every iteration, that way I can decide what to do with the results, something like this:

# Configure a bayesian optimization object
bo = bayesian_optimization(fn, lower, upper, num_iterations=10)

# Run it - this is how it works now and returns the best values
best = bo.run()

# This can return a dictionary or similar with all the results
bo.results()

# Lazy run - new way of running the optimization, returns a generator
gen = bo.lazy_run()

# Iterate over the generator
for i in gen:
    print(i)
    # Save to db
    # Do whatever you want with the results

# Get the results - also returns a dictionary or similar
bo.results()

I already started working on this in my fork but if you are interested we can discuss the details so I can merge here when it's done.

aaronkl commented 7 years ago

In fact we have a similar project ongoing that allows to easily store and load results into a database based on the python tool sacred (https://github.com/IDSIA/sacred) . Unfortunately, it is not in a state yet that we can make it public.

edublancas commented 7 years ago

I see. Well, I guess I can still keep contributing with general improvements for RoBo. Thanks!