-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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
Parameter Types: Handling and Implementation #376
Comments
Hey, I must admit I've never had to use categorical parameters and as such never given it much thought :-P
|
Hi @bwheelz36, I think you're right about it not cluttering the (user-facing) API too much. Internally, however, there is a substantial back-and-forth happening when transforming the parameters, especially if we want to handle everything for the user -- at least I didn't find a way around this. I think the question is ultimately how "convenient" we want to make things for endusers. As for my draft, see here. The code itself needs a lot of clean-up but you can see how it would work from a user-perspective. |
Hello till, This feature to support non-float type is not implemented in the master branch, right? |
Hi, no this feature is not on the main branch yet. |
I guess it would be quite helpful to have someone test this right @till-m ? |
yes, expect it to be a bit unstable, but I would love some feedback :) |
Hi @Chiu-Ping, did you ever get around to testing the feature? |
Why?
Support for non-float parameters types is by far the most-request feature that this package doesn't have as of now.
Why this issue?
I would like to explicitly discuss if and how to implement parameter types. In that sense this issue isn't a feature request, but intended to server as a space to collect discussions about this topic.
How?$$\tilde{k}( x_i, x_j)=k(T(x_i), T(x_j))$$ where $T$ acts on elements of $x_i$ according to their type.
For my perspective, Garrido-Merchán and Hernández-Lobato seems to make the most sense.
This means converting the parameters within the kernel:
What is necessary?
Essentially all of this "only" requires three functions to transform the parameters:
optimizer.max()
, etc)_space.random_sample()
andacq_max()
into kernel representation.Naturally, it requires changing a lot of other code, too; and particularly in ways that make everything a bit messier. Additionally, wrapping the kernel requires some slightly hacky python magic due to the way
sklearn.gaussian_process
' kernels are set up.Alternatives
Instead of offering proper support, we could simply refer users to @leifvan's implementation here. Alternatively, we could set up a notebook that demonstrates his approach. I'm almost favouring this approach since I'm worried about cluttering the API too much.
Are you able and willing to implement this feature yourself and open a pull request?
The text was updated successfully, but these errors were encountered: