-
Hi, I am a student using a botorch. I use integer input and float output data. I have implemented BO based on the example code provided by default. Like this
I used integer values of 0, 50, 100, 150 as inputs and float values as outputs. Modeling proceeded as in the code above.
I rounded the output value because I need to get a parameter set of 0, 50, 100, and 150. And this is where the problem arises. The biggest problem is that the training data are output again. I did some searching to solve this problem and found the acqf_discrete function. But I'm not sure how to use this function. Please provide examples or information that can be used as a reference for using this function. Additionally, I was wondering if there is a way to get multiple maximal parameter sets that don't overlap using acqf. For example, if the maximum point a is obtained through acqf, is there a way to get the next maximum point b and c? Thanks for reading the beginner's article. |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 3 replies
-
However, it looks like you're generating a batch of candidates to be evaluated in general here - in order for this to make sense in an iterative fashion you'll need to tell the acquisition function about the points you've previously selected (using the Another thing to note is that the default priors we use on the models assume that the input data lives in the unit cube and that the observations are (more or less) zero mean with unit variance. With inputs/outputs of the scale you're using here, the model fits could end up being quite bad, so I recommend you normalize the inputs to the unit cube and standardize the outputs (you can use the following utilities for that: botorch/botorch/utils/transforms.py Line 44 in 3318c06 botorch/botorch/utils/transforms.py Line 67 in 3318c06 |
Beta Was this translation helpful? Give feedback.
acqf_discrete
is meant to be used if you have a set of possible discrete inputs of relatively small cardinality. It looks like here you're using ints between 0 and 150, and so that is not the case here (151^6 ~ 1.2e13). While there can be issues with rounding to integer values if the range is relatively small, wouldn't be too worried about this in your case, so your approach of usingoptimize_acqf
is reasonable.However, it looks like you're generating a batch of candidates to be evaluated in general here - in order for this to make sense in an iterative fashion you'll need to tell the acquisition function about the points you've previously selected (using the
X_pending
input to the const…