Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bayesian Optimization Example #126

Open
caxelrud opened this issue Aug 30, 2020 · 13 comments
Open

Bayesian Optimization Example #126

caxelrud opened this issue Aug 30, 2020 · 13 comments

Comments

@caxelrud
Copy link

Can you point me to an example, using Stheno, of Bayesian Optimization with an objective that considers exploration and exploitation?

@willtebbutt
Copy link
Member

Hiya. Unfortunately I've yet to see Stheno.jl used to do this -- if you encounter one please do report back here about it.

@caxelrud
Copy link
Author

Hi. The following blog is very informative:
http://krasserm.github.io/2018/03/21/bayesian-optimization/
If you put together an example, I can help test it.
Not able to do it by myself since I am just migrating to Julia coding.
Thanks,

@yiyuezhuo
Copy link

yiyuezhuo commented Aug 31, 2020

I'm working on a project related to Bayesian optimization so I can write a BO example using Stheno if someone is interested.

@willtebbutt
Copy link
Member

It would be great if someone could do some design work to specify an interface that a probabilistic model should satisfy to be compatible with Bayes Opt, and then implement Bayes Opt in terms of that interface. Then you could just hook whatever model you fancy into it.

For example, it looks like BayesianOptimization.jl goes some way towards this, but I can't tell from the package exactly what's going on. I wonder if the author @jbrea has anything to say on the matter?

@jbrea
Copy link

jbrea commented Sep 1, 2020

Hi,

thanks for pinging me.

BayesianOptimization.jl is indeed designed to work with different models.
Currently, a model of type MyModel needs to implement the following functions

m, v = mean_var(m::MyModel, x::AbstractVector)  # return scalar mean and variance of the model at x 
m, v = mean_var(m::MyModel, x::AbstractMatrix)  # return size(x,2)-dimensional vector of means and variances of the model at x
update!(m::MyModel, x, y)                       # update the model with new inputs x and observations y
y = maxy(m::MyModel)                            # return the largest observed value used to fit the model
nx, nsamples = dims(m::MyModel)                 # return the dimensionalty nx of the input and the number of samples nsamples used so far to fit the model

The code of BayesianOptimization.jl is a bit rusty. If there is interest, I can polish it a bit and document the API better.
PR's to include Shteno models (or any other kind of model) are highly welcome, of course.

Note that it is somewhat costly to fit a full GP everytime a new observation arrives,
which is why I wrote https://github.com/jbrea/ElasticPDMats.jl to update a GP with new observations.

@yiyuezhuo
Copy link

I guess @caxelrud wants an example similar to his link instead of a full function interface? Anyway this is a gist replicating the result of referenced link:

https://gist.github.com/yiyuezhuo/12e2dc828ac358f58e60ebd41b28f768

@caxelrud
Copy link
Author

caxelrud commented Sep 2, 2020

@yiyuezhuo, I am getting an error when trying you open the notebook from the gist link from your comment ( https://gist.github.com/yiyuezhuo/12e2dc828ac358f58e60ebd41b28f768 ).
I downloaded but I it fail.
Thanks

@yiyuezhuo
Copy link

yiyuezhuo commented Sep 3, 2020

@caxelrud, what error do you get? I can run this notebook without any error. Did you add the packages Stheno, Plots, Optim, Distributions?

@caxelrud
Copy link
Author

caxelrud commented Sep 4, 2020

@yiyuezhuo, I am getting an error with the Jupyter notebook. It looks corrupted for some reason. It doesn't open at the link (keep spinning and fail). I got the same problem when downloading and trying to run the Jupyter notebook in my computer.
You can also send me the Julia file. Thanks.

@yiyuezhuo
Copy link

yiyuezhuo commented Sep 4, 2020

@caxelrud, maybe you should check IJulia doc to ensure that you can run minimal Julia 1.5 example in Jupyter notebook at least.

@caxelrud
Copy link
Author

caxelrud commented Sep 4, 2020

@yiyuezhuo, I checked Jupyter Notebook and it allows me to create new notebook with Julia 1.5.0.
I will check more.
But, the message I get from Jupyter, when trying to execute the note, is the following:
Unreadable Notebook: C:\Users\inter\OneDrive_myWork\Research2020\BayesianOpt_2020\bayesian_optimization3.ipynb NotJSONError('Notebook does not appear to be JSON: '{\n "cells": [\n {\n "cell_type": "m...')

@yiyuezhuo
Copy link

yiyuezhuo commented Sep 4, 2020

@caxelrud, sorry it seems that GitHub always corrupts first updated file in gist right now for some reason, I update the gist again to fix this.

@caxelrud
Copy link
Author

caxelrud commented Sep 4, 2020

@yiyuezhuo, looks good now. I will test it. I will next apply to a much larger dimension problem. I will report my findings. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants