Beispiel #1
0
def learn_flow(X, y, lengthscales, variance=1.0):

    dimensions = X.shape[1]

    #    lengthscales = [ l_scale for d in range(dimensions)]
    kernel = GPy.kern.rbf(dimensions,
                          ARD=True,
                          lengthscale=lengthscales,
                          variance=variance)
    m = GPRegression(X, y, kernel)

    m.optimize('bfgs', max_iters=1000)

    return m
Beispiel #2
0
    def __init__(self,
                 x0,
                 y0,
                 cons=None,
                 alpha=opt.ke_alpha,
                 beta=opt.ke_beta,
                 input_size=opt.ke_input_size,
                 hidden_size=opt.ke_hidden_size,
                 num_layers=opt.ke_num_layers,
                 bidirectional=opt.ke_bidirectional,
                 lr=opt.ke_lr,
                 weight_decay=opt.ke_weight_decay):

        super(Kernel, self).__init__()
        self.alpha = alpha
        self.beta = beta
        self.lstm = nn.LSTM(input_size=input_size,
                            hidden_size=hidden_size,
                            num_layers=num_layers,
                            bidirectional=bidirectional)
        self.lstm = self.lstm.to(opt.device)
        self.input_size = input_size
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        self.bidirectional = bidirectional
        self.bi = 2 if bidirectional else 1

        self.x = [x0]
        self.y = torch.tensor([y0],
                              dtype=torch.float,
                              device=opt.device,
                              requires_grad=False)
        self.cons = [cons]
        inp, out = clean_x(self.x, self.cons)
        self.model = GPRegression(inp, out)
        self.model.Gaussian_noise.constrain_fixed(1e-6, warning=False)
        self.model.optimize()
        self.x_best = x0
        self.y_best = y0
        self.i_best = 0

        self.n = 1
        self.E = self.embedding(x0).view(1, -1)
        self.K = self.kernel(self.E[0], self.E[0]).view(1, 1)
        self.K_inv = torch.inverse(self.K + self.beta *
                                   torch.eye(self.n, device=opt.device))
        self.optimizer = optim.Adam(self.lstm.parameters(),
                                    lr=lr,
                                    weight_decay=weight_decay)
Beispiel #3
0
def fit_GPy_kern(X, Y, kernel, restarts, score = BIC, **kwargs):
    if len(np.shape(X)) == 1: X = np.array(X)[:, None]
    if len(np.shape(Y)) == 1: Y = np.array(Y)[:, None]

    m = GPRegression(X, Y, kernel)
    m.optimize_restarts(num_restarts = restarts, **kwargs)

    m.plot()
    print(m.kern)
    print(f'Log-Likelihood: {m.log_likelihood()}')
    print(f'{score.__name__}: {score(m.log_likelihood(), len(X), m._size_transformed())}')

    plt.show()

    return m
Beispiel #4
0
    def from_model_params(gp_config: GPConfig, model_params: ModelParameters,
                          X, Y) -> "GPyModel":
        kernel = GPyModel.create_kernel(model_params.kernel,
                                        X.shape[1],
                                        ARD=gp_config.ard)

        model = GPRegression(X, Y, kernel=kernel, normalizer=len(X) > 1)

        for name, value in model_params.params.items():
            model[name] = value

        acquisition_fn = GPyModel.parse_acquisition_fn(
            model_params.acquisition_fn)

        return GPyModel(model, acquisition_fn)
Beispiel #5
0
    def _fit_model(self, X, Y):
        if max(Y) < 0:
            self.transformed = True
        else:
            self.transformed = False

        Y_trans = self._transform_score(Y)

        model = GPRegression(X, Y_trans, self.kernel)
        # Catch fitting error
        try:
            model.optimize_restarts(num_restarts=self.n_init, verbose=False)
            self.model = model
        except np.linalg.linalg.LinAlgError:
            self.model = None
Beispiel #6
0
def rmse_rbf(x_train: np.ndarray, y_train: np.ndarray, x_test: np.ndarray,
             y_test: np.ndarray) -> float:
    """RMSE of a GPy RBF kernel.

    :param x_train:
    :param y_train:
    :param x_test:
    :param y_test:
    :return:
    """
    model = GPRegression(x_train,
                         y_train,
                         kernel=RBF(input_dim=x_train.shape[1]))
    model.optimize()
    return compute_gpy_model_rmse(model, x_test, y_test)
    def _create_model(self,
                      x: np.ndarray,
                      y: np.ndarray):
        """Create model given input data X and output data Y.

        :param x: 2d array of indices of distance builder
        :param y: model fitness scores
        :return:
        """
        # Make sure input data consists only of positive integers.
        assert np.issubdtype(x.dtype, np.integer) and x.min() >= 0

        # Define kernel
        self.input_dim = x.shape[1]
        # TODO: figure out default kernel kernel initialization
        if self.covariance is None:
            assert self.covariance is not None
            # kern = GPy.kern.RBF(self.input_dim, variance=1.)
        else:
            kern = self.covariance.raw_kernel
            self.covariance = None

        # Define model
        noise_var = y.var() * 0.01 if self.noise_var is None else self.noise_var
        normalize = x.size > 1  # only normalize if more than 1 observation.
        self.model = GPRegression(x, y, kern, noise_var=noise_var, normalizer=normalize)

        # Set hyperpriors
        if self.kernel_hyperpriors is not None:
            if 'GP' in self.kernel_hyperpriors:
                # Set likelihood hyperpriors.
                likelihood_hyperprior = self.kernel_hyperpriors['GP']
                set_priors(self.model.likelihood, likelihood_hyperprior, in_place=True)
            if 'SE' in self.kernel_hyperpriors:
                # Set kernel hyperpriors.
                se_hyperprior = self.kernel_hyperpriors['SE']
                set_priors(self.model.kern, se_hyperprior, in_place=True)

        # Restrict variance if exact evaluations of the objective.
        if self.exact_f_eval:
            self.model.Gaussian_noise.constrain_fixed(1e-6, warning=False)
        else:
            # --- We make sure we do not get ridiculously small residual noise variance
            if self.model.priors.size > 0:
                # FIXME: shouldn't need this case, but GPy doesn't have log Jacobian implemented for Logistic
                self.model.Gaussian_noise.constrain_positive(warning=False)
            else:
                self.model.Gaussian_noise.constrain_bounded(1e-9, 1e6, warning=False)
    def predict(self, X):
        """
        Predicts the conditional expectation $E[Y \mid X=x]$ for all x in $X$.

        :param X: a numpy array of shape (num_predictions, num_dimensions)
        :return: a numpy array of shape (num_predictions,)
        """

        self._calculate_locregs()
        self.gpr_ = GPRegression(self.x_mesh_,
                                 np.atleast_2d(self.y_mesh_).T,
                                 self.gpr_kernel)
        self.gpr_.optimize(messages=False)
        #self.gpr_.optimize_restarts(num_restarts = 10)
        y_pred, self.gp_var_ = self.gpr_.predict(X)
        self.gp_var_ = self.gp_var_.squeeze()
        return y_pred.squeeze()
Beispiel #9
0
def test_add_training_data():
    Xadd = np.array([11, 12]).reshape(-1, 1)
    yadd = np.array([9, 10]).reshape(-1, 1)
    Xfull = np.concatenate([Xtrain, Xadd])
    yfull = np.concatenate([ytrain, yadd])
    for label in ('Custom', 'GPy', 'Sklearn'):
        sur = Surrogate[label]()
        sur.Xtrain = Xtrain
        sur.ytrain = ytrain
        if label == 'GPy':
            from GPy.models import GPRegression
            sur.model = GPRegression(Xtrain, ytrain)
        sur.add_training_data(Xadd, yadd)
        assert np.all(sur.Xtrain == Xfull)
        assert np.all(sur.ytrain == yfull)
        if label == 'GPy':
            assert np.all(sur.model.X == Xfull)
            assert np.all(sur.model.Y == yfull)
Beispiel #10
0
    def optimize_s_sn_l(self, sn, s, l):
        assert (isinstance(sn, float))
        assert (l.shape == (self.fix_W.shape[1], ))

        # Create a GP
        self.kernel.update_params(W=self.fix_W, s=s, l=l)

        # TODO:
        gp_reg = GPRegression(
            self.X,
            self.Y.reshape(-1, 1),
            self.kernel,
            noise_var=config['std_noise_var'])  # config['std_noise_var']
        gp_reg['Gaussian_noise.variance'].fix()
        try:
            gp_reg.optimize(
                optimizer="lbfgs", max_iters=1
            )  # lbfgs # config['max_iter_parameter_optimization'])
        except Exception as e:
            print(e)
            print(gp_reg.kern.K(gp_reg.X))
            print("Error above!")

        # TODO: does this optimization work in the correct direction?

        new_variance = gp_reg.kern.inner_kernel.variance
        new_lengthscale = gp_reg.kern.inner_kernel.lengthscale
        new_sn = gp_reg['Gaussian_noise.variance']

        # print("New values: ")
        # print("variance")
        # print(new_variance)
        # print("lengthscales")
        # print(new_lengthscale)
        # print("variances")
        # print(new_sn)
        #
        # exit(0)

        assert gp_reg.kern.inner_kernel.lengthscale is not None
        assert gp_reg.kern.inner_kernel.variance is not None
        # assert not np.isclose(np.asarray(new_lengthscale), np.zeros_like(new_lengthscale) ).all(), new_lengthscale

        return float(new_variance), new_lengthscale.copy(), float(new_sn)
Beispiel #11
0
    def check_jacobian(self):
        try:
            import autograd.numpy as np, autograd as ag, GPy, matplotlib.pyplot as plt
            from GPy.models import GradientChecker, GPRegression
        except:
            raise self.skipTest("autograd not available to check gradients")
        def k(X, X2, alpha=1., lengthscale=None):
            if lengthscale is None:
                lengthscale = np.ones(X.shape[1])
            exp = 0.
            for q in range(X.shape[1]):
                exp += ((X[:, [q]] - X2[:, [q]].T)/lengthscale[q])**2
            #exp = np.sqrt(exp)
            return alpha * np.exp(-.5*exp)
        dk = ag.elementwise_grad(lambda x, x2: k(x, x2, alpha=ke.variance.values, lengthscale=ke.lengthscale.values))
        dkdk = ag.elementwise_grad(dk, argnum=1)

        ke = GPy.kern.RBF(1, ARD=True)
        #ke.randomize()
        ke.variance = .2#.randomize()
        ke.lengthscale[:] = .5
        ke.randomize()
        X = np.linspace(-1, 1, 1000)[:,None]
        X2 = np.array([[0.]]).T
        np.testing.assert_allclose(ke.gradients_X([[1.]], X, X), dk(X, X))
        np.testing.assert_allclose(ke.gradients_XX([[1.]], X, X).sum(0), dkdk(X, X))
        np.testing.assert_allclose(ke.gradients_X([[1.]], X, X2), dk(X, X2))
        np.testing.assert_allclose(ke.gradients_XX([[1.]], X, X2).sum(0), dkdk(X, X2))

        m = GPRegression(self.X, self.Y)
        def f(x):
            m.X[:] = x
            return m.log_likelihood()
        def df(x):
            m.X[:] = x
            return m.kern.gradients_X(m.grad_dict['dL_dK'], X)
        def ddf(x):
            m.X[:] = x
            return m.kern.gradients_XX(m.grad_dict['dL_dK'], X).sum(0)
        gc = GradientChecker(f, df, self.X)
        gc2 = GradientChecker(df, ddf, self.X)
        assert(gc.checkgrad())
        assert(gc2.checkgrad())
Beispiel #12
0
    def _create_model(self, X, y):
        """
        Creates the GPy model given some input data X and Y.
        """

        # Define kernel
        input_dim = X.shape[1]
        if self._kernel is None:
            kern = GPy.kern.Matern52(input_dim, variance=1., ARD=self._ARD)
        else:
            kern = self._kernel
            self._kernel = None

        # Define model
        noise_var = y.var() * 0.01
        if not self._sparse:
            self.model = GPRegression(X, y, kernel=kern, noise_var=noise_var)
        else:
            self.model = SparseGPRegression(X, y, kernel=kern,
                                            num_inducing=self._num_inducing)
        self.model.Gaussian_noise.constrain_bounded(1e-9, 1e6, warning=False)
Beispiel #13
0
 def fit(self,
         restarts=None,
         optimiser='lbfgsb',
         verbose=False,
         robust=False,
         **kwargs):
     if restarts is None:
         if self.restarts is None:
             raise ValueError('No restarts value specified')
     else:
         self.restarts = restarts
     self.model = GPRegression(self.X, self.Y,
                               self.kernel_expression.to_kernel())
     with warnings.catch_warnings():  # Ignore known numerical warnings
         warnings.simplefilter('ignore')
         self.model.optimize_restarts(num_restarts=self.restarts,
                                      verbose=verbose,
                                      robust=robust,
                                      optimizer=optimiser,
                                      **kwargs)
     return self
Beispiel #14
0
    def _fit(self, X, y, ECM=None):
        self._X = X
        self._y = y

        kern_dict = {
            'm32':
            Matern32(input_dim=self._X.shape[1],
                     active_dims=list(range(self._X.shape[1])),
                     ARD=True),
            'm52':
            Matern52(input_dim=self._X.shape[1],
                     active_dims=list(range(self._X.shape[1])),
                     ARD=True),
            'rbf':
            RBF(input_dim=self._X.shape[1],
                active_dims=list(range(self._X.shape[1])),
                ARD=True)
        }

        self.__model = GPRegression(X, y, kern_dict[self.__kernel_name])
        self.__model.optimize_restarts(self.__n_restarts,
                                       verbose=self._verbose)
        return self
Beispiel #15
0
 def build_model(self, params, nrestarts=10, maxit=1000, seed=0):
     print("Hyperparameters: ", params)
     self.split_train_test(params)
     np.random.seed(
         seed)  # make GPy deterministic for a given hyperparameter config
     dim = self.X.shape[1]
     if self.input_obj.keywords['gp_ard'] == 'opt':
         ard_val = params['ARD']
     elif self.input_obj.keywords['gp_ard'] == 'true':
         ard_val = True
     else:
         ard_val = False
     kernel = RBF(dim, ARD=ard_val)  # TODO add HP control of kernel
     self.model = GPRegression(self.Xtr,
                               self.ytr,
                               kernel=kernel,
                               normalizer=False)
     self.model.optimize_restarts(nrestarts,
                                  optimizer="lbfgsb",
                                  robust=True,
                                  verbose=False,
                                  max_iters=maxit,
                                  messages=False)
     gc.collect(2)  #fixes some memory leak issues with certain BLAS configs
    def __fit_single_gaussian_process(variable, response_norm, num_restarts=7):
        """
        GP fitting.

        Returns the GP and kernel.

        :param variable: time
        :param response_norm: log-normalized target
        :return [tuple] a tuple:
            - the gp object
            - the kernel
        """

        obs_per_replicate = response_norm.shape[1]

        kernel = RBF(input_dim=1, variance=1., lengthscale=10.)
        variable = np.tile(variable, (response_norm.shape[0], 1))
        response = np.resize(
            response_norm,
            (response_norm.shape[0] * response_norm.shape[1], 1))
        gp = GPRegression(variable, response, kernel)
        gp.optimize_restarts(num_restarts=num_restarts, messages=False)

        return gp, kernel
Beispiel #17
0
n_samples = 5

parameter_space = ParameterSpace([ContinuousParameter('x1', 0., 157.)])

# parameter_space = ParameterSpace(
#     [ContinuousParameter('x1', 0., 157.), ContinuousParameter('x2', 0., 157.), ContinuousParameter('x3', 0., 157.),
#      ContinuousParameter('x4', 0., 157.), ContinuousParameter('x5', 0., 157.), ContinuousParameter('x6', 0., 5999.),
#      ContinuousParameter('x7', 0., 999.), ContinuousParameter('x8', 0., 699.)])

latin_design = LatinDesign(parameter_space=parameter_space)
X0 = latin_design.get_samples(n_samples)
Y0 = training_function(X0)
#D0 = ((Y0 - target)**2).sum(axis=1)
#plotter = BayesOptPlotter(h_noiseless, target, xmin, xmax, X0=X0, Y0=Y0)

model = GPRegression(X0, Y0)
model_wrapped = GPyModelWrapper(model)
target = user_sample_vector
acq = L2_LCB(model=model_wrapped, target=target)

fit_update = lambda a, b: model.optimize_restarts(verbose=False)
bayesopt_loop = BayesianOptimizationLoop(model=model_wrapped,
                                         space=parameter_space,
                                         acquisition=acq)
bayesopt_loop.iteration_end_event.append(fit_update)
bayesopt_loop.run_loop(training_function, 5)

# 5. train and wrap the model in Emukit
# model_gpy = GPRegression(X, Y, normalizer=True)
#
# model_emukit = GPyModelWrapper(model_gpy)
Beispiel #18
0
def main():
    print("######################")
    global target, X0, Y0, values, frac_M, frac_X, bo_flag

    #target_params = np.array([[0.14,0.4],[1.4,0.03]])

    #target = LiX_wrapper(True,'LiF','Rocksalt','JC',
    #                     target_params,False,False,eng)

    target = np.array([[-764.5, 6.012 * 0.99, 6.012 * 0.99, 6.012 * 0.99]])

    if focus == 'energy':
        target_comp = target[0, 0].reshape(1, -1)
    if focus == 'constant':
        target_comp = target[0, 1].reshape(1, -1)
    else:
        target_comp = target[0, :4].reshape(1, -1)

    print('Target initialized!')

    latin_design = LatinDesign(parameter_space=parameter_space)
    X0 = latin_design.get_samples(INIT_POINTS)
    Y0 = np.array([])
    for x in X0:
        x = np.array([x])
        Y0 = np.append(Y0, f.evaluate(x))
    values = []

    for y in Y0:
        values.append(y.Y)

    values = np.asarray(values, dtype=float)

    ### Redundancy check
    if (values[:, 7:-1] == values[0, 7]).all():
        values = values[:, :7]
        frac_X = False

    if (values[:, 4:7] == values[0, 4]).all():
        values = values[:, :4]
        frac_M = False

    values = values.reshape(-1, np.max(np.shape(target)))
    bo_flag = True

    if focus == 'energy':
        values = values[:, 0].reshape(-1, 1)
    if focus == 'constant':
        values = values[:, 1:4].reshape(-1, 3)

    ### BO Loop
    kern = Matern52(X0.shape[1], variance=1)
    model = GPRegression(X0,
                         values,
                         kernel=kern,
                         normalizer=True,
                         noise_var=NOISE)  # Kernel = None: RBF default

    model.optimize(optimizer='lbfgsb')
    model.optimize_restarts(num_restarts=50, verbose=False)
    model_wrapped = GPyModelWrapper(model)

    acq = L2_LCB(model=model_wrapped, target=target_comp, beta=np.float64(1.))
    # beta is the exploration constant
    bayesopt_loop = BayesianOptimizationLoop(model=model_wrapped,
                                             space=parameter_space,
                                             acquisition=acq)
    bayesopt_loop.run_loop(f, BO_ITER)

    return save(bayesopt_loop)
Beispiel #19
0
    PPO_totalR = []
    EI_totalR = []
    PI_totalR = []
    for ep in range(30):

        fun = env.reset(upper_bound=1, lower_bound=0)
        ppo.ppoMax = 0
        ppoMin = float('inf')
        ppo.ep_r = 0
        ppo.funCurMax = env.maxVal
        ppo.curFun = env.getCurFun()

        design = RandomDesign(parameter_space)  # Collect random points
        X = design.get_samples(num_data_points)
        Y = fun(X)
        model_gpy = GPRegression(X, Y)  # Train and wrap the model in Emukit
        model_emukit = GPyModelWrapper(model_gpy)
        ppo.model = model_emukit
        bo = BayesianOptimizationLoop(model=model_emukit,
                                      space=parameter_space,
                                      acquisition=ppo,
                                      batch_size=1)
        mu = np.array([np.mean(bo.loop_state.X)])[np.newaxis]
        var = np.array([np.var(bo.loop_state.X)])[np.newaxis]
        s = np.concatenate((mu, var), axis=1)
        boPPOep_r = []

        model_gpyEI = GPRegression(X, Y)  # Train and wrap the model in Emukit
        model_emukitEI = GPyModelWrapper(model_gpyEI)
        boEI = BayesianOptimizationLoop(model=model_emukitEI,
                                        space=parameter_space,
Beispiel #20
0
noise = 0.1
####################
# Noise free training data
X_train = np.array([-4, -3, -2, -1, 3]).reshape(-1, 1)
Y_train = np.sin(X_train)

rbf = RBF(input_dim=1, variance=1.0, lengthscale=1.0)
brownian = Brownian(input_dim=1, variance=1.0)
periodic = PeriodicExponential(input_dim=1, variance=2.0, n_freq=100)
cosine = Cosine(input_dim=1, variance=2)
exponential = Exponential(input_dim=1, variance=2.0)
integral = Integral(input_dim=1, variances=2.0)
matern = Matern32(input_dim=1, variance=2.0)

gpr = GPRegression(X_train, Y_train, matern)

# Fix the noise variance to known value
gpr.Gaussian_noise.variance = noise**2
gpr.Gaussian_noise.variance.fix()

# Run optimization
ret = gpr.optimize()
print(ret)
# Display optimized parameter values
print(gpr)

# Obtain optimized kernel parameters
#l = gpr.rbf.lengthscale.values[0]
#sigma_f = np.sqrt(gpr.rbf.variance.values[0])
Beispiel #21
0
        return self.variance * K.diagonal()

    def update_gradients_full(self, dL_dK, X, X2=None):
        if X2 is None:
            X2 = X

        Xind = np.asarray(X, dtype=int).flatten()
        X2ind = np.asarray(X2, dtype=int).flatten()
        K = self.string_kernel[Xind][:, X2ind]

        self.variance.gradient = np.einsum("ij,ij", dL_dK, K)

    def update_gradients_diag(self, dL_dKdiag, X):
        Xind = np.asarray(X, dtype=int).flatten()
        K = self.string_kernel[Xind][:, Xind]

        self.variance.gradient = np.einsum("i,i", dL_dKdiag, K)


if __name__ == "__main__":
    x1 = "ATCGATCG"
    x2 = "ATCGATCG"
    x3 = "ATCGATCC"
    x4 = "ATCGATAA"
    x5 = "ANNNNNNN"
    X = np.arange(5)[:, None]
    y = np.random.randn(5, 1)
    kern = WeightedDegree(1, np.array([x1, x2, x3, x4, x5]))
    m = GPRegression(X, y, kernel=kern)
Beispiel #22
0
def model():
    x_init = np.random.rand(5, 2)
    y_init = np.random.rand(5, 1)
    model = GPRegression(x_init, y_init, RBF(2))
    return GPyModelWrapper(model)
from deepgp_gpy.utils import posterior_sample
from deepgp import DeepGP
from visualization import plot_gp, model_output, pred_range, visualize_pinball

data = pods.datasets.olympic_marathon_men()
x = data['X']
y = data['Y']

offset = np.mean(y)
scale = np.sqrt(np.var(y))

xlim = (1875, 2030)
ylim = (2.5, 6.5)
yhat = (y - offset) / scale

gp_regression = GPRegression(x, yhat)
gp_regression.optimize()

model_output(gp_regression)
###################deep gp

hidden = 1
dgp = DeepGP(
    [y.shape[1], hidden, x.shape[1]],
    Y=yhat,
    X=x,
    inits=['PCA', 'PCA'],
    kernels=[RBF(hidden, ARD=True),
             RBF(x.shape[1], ARD=True)],  # the kernels for each layer
    num_inducing=50,
    back_constraint=False)
Beispiel #24
0
def acquisition():
    rng = np.random.RandomState(42)
    x_init = rng.rand(5, 2)
    y_init = rng.rand(5, 1)
    model = GPRegression(x_init, y_init, RBF(2))
    return ProbabilityOfImprovement(GPyModelWrapper(model))
x_half = int(N / 2)
X[:x_half, :] = np.linspace(0, 2,
                            x_half)[:,
                                    None]  # First cluster of inputs/covariates
X[x_half:, :] = np.linspace(
    8, 10, x_half)[:, None]  # Second cluster of inputs/covariates

rbf = RBF(input_dim=1)
mu = np.zeros(N)
cov = rbf.K(X) + np.eye(N) * np.sqrt(noise_var)
y = np.random.multivariate_normal(mu, cov).reshape(-1, 1)

# plt.scatter(X, y)
# plt.show()

gp_regression = GPRegression(X, y)
gp_regression.optimize(messages=True)
log_likelihood1 = gp_regression.log_likelihood()

model_output(gp_regression,
             title="GP Regression with loglikelihood: " + str(log_likelihood1))

#################################
# inducing variables, u. Each inducing variable has its own associated input index, Z, which lives in the same space as X.
Z = np.hstack((np.linspace(2.5, 4., 3), np.linspace(7, 8.5, 3)))[:, None]

sparse_regression = SparseGPRegression(X, y, kernel=rbf, Z=Z)

sparse_regression.noise_var = noise_var
sparse_regression.inducing_inputs.constrain_fixed()
    def fit_gaussian_processes(self, control=None, num_restarts=7):
        """
        This is the new version, which fits only on the `relevant' interval
        Fits a GP for both the control and case growth curves,
        H1 with time and treatment, and H0 with only time.

        :param control If None, then just fits one GP - else, fits 3 different GPs
                        (one for case, two for gp_h0 and gp_h1):
        :param num_restarts The number of restarts in the optimisation: 
        :return [None] creates the GP objects:
        """
        logger.info("Fitting Gaussian processes for " + self.name)

        # control for number of measurements per replicate if time not same length
        # self.response_norm.shape[0] is num replicates, [1] is num measurements
        ## TODO:: Can we remove this line?
        obs_per_replicate = self.response_norm.shape[1]
        print("Now attempting to fit:")
        print("self.name:")
        print(self.name)
        print("Self.source_id:")
        print(self.source_id)

        self.gp_kernel = RBF(input_dim=1, variance=1., lengthscale=10.)

        response_norm_trunc = self.response_norm[:, self.
                                                 variable_treatment_start_index:
                                                 self.
                                                 variable_treatment_end_index]

        # # Determine index of first mouse death to remove all NaNs before fitting the model
        # first_death_idx = min(np.sum(~np.isnan(response_norm_trunc), axis=1))
        #
        # # Subset the independent variable and response data
        # response_norm_trunc = response_norm_trunc[:, 0:first_death_idx]
        # variable_trunc = self.variable[0:first_death_idx, :]

        # Reshape the data to pass into GPRegression (flatten into a single column)
        variable = np.tile(
            self.variable[self.variable_treatment_start_index:self.
                          variable_treatment_end_index],
            (len(self.replicates), 1))
        response = np.resize(
            response_norm_trunc,
            (response_norm_trunc.shape[0] * response_norm_trunc.shape[1], 1))

        self.gp = GPRegression(variable, response, self.gp_kernel)
        self.gp.optimize_restarts(num_restarts=num_restarts, messages=False)

        if control is not None:
            # Subset full data for control calculations
            # self.full_data = self.full_data[np.isin(self.full_data[:, 0], variable_trunc), :]

            # kernels
            self.gp_h0_kernel = RBF(input_dim=1, variance=1., lengthscale=10.)
            self.gp_h1_kernel = RBF(input_dim=2, variance=1., ARD=True)

            # GPs
            self.gp_h0 = GPRegression(self.full_data[:, 0:1],
                                      self.full_data[:,
                                                     2:3], self.gp_h0_kernel)
            self.gp_h1 = GPRegression(self.full_data[:, 0:2],
                                      self.full_data[:,
                                                     2:3], self.gp_h1_kernel)

            # optimize GPs
            self.gp_h0.optimize_restarts(num_restarts=num_restarts,
                                         messages=False,
                                         robust=True)  # silent exceptions
            self.gp_h1.optimize_restarts(num_restarts=num_restarts,
                                         messages=False,
                                         robust=True)

            self.delta_log_likelihood_h0_h1 = self.gp_h1.log_likelihood(
            ) - self.gp_h0.log_likelihood()
Beispiel #27
0
        return mu[0, 0], var[0, 0]
    else:
        mu, _ = model.predict(x_new)
        return mu[0, 0]


list_mse_gpr = []
list_mse_lgb = []
list_mse_svr = []
for i in range(1):
    print(i)

    x_train_m, y_train_m = a_gpr.sample_point(x_train, y_train, iter=80)
    k_rbf = RBF(input_dim=n, variance=0.5, lengthscale=1)
    gp_model = GPRegression(x_train_m,
                            np.reshape(y_train_m, (-1, 1)),
                            kernel=k_rbf)
    gp_model.optimize(messages=False)

    model_lgb = lgb.LGBMRegressor()
    model_lgb.fit(x_train_m, y_train_m)

    model_svr = SVR()
    model_svr.fit(x_train_m, y_train_m)

    y_pre_con = [
        pre_gp_mu_var(np.reshape(x_test[i], (1, -1)), gp_model)
        for i in range(np.shape(x_test)[0])
    ]
    y_pre_lgb = [
        model_lgb.predict(np.reshape(x_test[i], (1, -1)))
'''

data = pods.datasets.della_gatta_TRP63_gene_expression(data_set='della_gatta',
                                                       gene_number=937)

x = data['X']
y = data['Y']

offset = np.mean(y)
scale = np.sqrt(np.var(y))

yhat = (y - offset) / scale

#kernel = RBF(input_dim=1, variance=100)
#kernel = Matern32(input_dim=1, variance=2.0, lengthscale=200)
model = GPRegression(x, yhat)
model.kern.lengthscale = 20  #this will widen with 100, 200
#gp_regression.likelihood.variance = 0.001

print(model.log_likelihood())
model.optimize()
print(model.log_likelihood())

xt = np.linspace(-20, 260, 100)[:, np.newaxis]
yt_mean, yt_var = model.predict(xt)

plot_gp(yt_mean,
        yt_var,
        xt,
        X_train=model.X.flatten(),
        Y_train=model.Y.flatten())
Beispiel #29
0
    for g in range(len(l_ind)):
        # Check that resonator geometry is sensible:
        if l_ind[g] > l_cap[g]/2:
            out[g,0] = 10e20 #Large cost to bad geometry
        else:
            out[g,0] = -simulation_wrapper(host, COMSOL_model, paramfile, w[g], t, l_ind[g], pen, omega, gap_cap[g], w_cap[g], l_cap[g], w_mesa, h_mesa, gap_ind[g])[0]
    return out

# Set up random seeding of parameter space
num_data_points = no_random_seeds
design = RandomDesign(parameter_space)
X = design.get_samples(num_data_points)
Y = q(X)

# Set up emukit model
model_gpy = GPRegression(X,Y)
model_gpy.optimize()
model_emukit = GPyModelWrapper(model_gpy)

# Set up Bayesian optimisation routine
exp_imprv = ExpectedImprovement(model = model_emukit)
optimizer = GradientAcquisitionOptimizer(space = parameter_space)
point_calc = SequentialPointCalculator(exp_imprv,optimizer)

# Bayesian optimisation routine
bayesopt_loop = BayesianOptimizationLoop(model = model_emukit,
                                         space = parameter_space,
                                         acquisition=exp_imprv,
                                         batch_size=1)

stopping_condition = FixedIterationsStoppingCondition(i_max = no_BO_sims)
Beispiel #30
0
init_design = RandomDesign(space)
X_init = init_design.get_samples(2)
Y_init = np.array([b.objective_function(xi)["function_value"] for xi in X_init])[:, None]

if args.model_type == "bnn":
    model = Bohamiann(X_init=X_init, Y_init=Y_init, verbose=True)

elif args.model_type == "rf":
    model = RandomForest(X_init=X_init, Y_init=Y_init)
    with_gradients = False


elif args.model_type == "gp":
    kernel = Matern52(len(list_params), variance=1., ARD=True)
    gpmodel = GPRegression(X_init, Y_init, kernel)
    gpmodel.optimize()
    model = GPyModelWrapper(gpmodel)

acquisition = ExpectedImprovement(model)
acquisition_optimizer = DirectOptimizer(space)

candidate_point_calculator = Sequential(acquisition, acquisition_optimizer)

bo = BayesianOptimizationLoop(model=model, space=space, X_init=X_init, Y_init=Y_init, acquisition=acquisition,
                              candidate_point_calculator=candidate_point_calculator)

overhead = []
st = time.time()
for i in range(args.num_iterations):
    t = time.time()