def test_iso_gauss_measure_invalid_input(): wrong_variance = -2. mean_wrong_dim = np.ones([3, 1]) mean_wrong_type = 0. with pytest.raises(ValueError): IsotropicGaussianMeasure(mean=np.ones(3), variance=wrong_variance) with pytest.raises(TypeError): IsotropicGaussianMeasure(mean=mean_wrong_type, variance=1.) with pytest.raises(ValueError): IsotropicGaussianMeasure(mean=mean_wrong_dim, variance=1.)
def test_iso_gauss_measure_shapes(): D = 4 N = 5 x = np.reshape(np.random.randn(D * N), [N, D]) measure = IsotropicGaussianMeasure(mean=np.ones(D), variance=1.) bounds = measure.get_box() assert len(bounds) == D assert len(bounds[0]) == 2 assert measure.dim == D res = measure.compute_density(x) assert res.shape == (N, )
def test_iso_gauss_measure_gradients(): D = 2 measure = IsotropicGaussianMeasure(mean=np.random.randn(D), variance=np.random.randn()**2) N = 3 x = np.reshape(np.random.randn(D * N), [N, D]) _check_grad(measure, x)
def test_iso_gauss_measure_shapes(): D = 4 N = 5 x = np.reshape(np.random.randn(D * N), [N, D]) measure = IsotropicGaussianMeasure(mean=np.ones(D), variance=1.) bounds = measure.get_box() assert len(bounds) == D assert len(bounds[0]) == 2 assert measure.num_dimensions == D res = measure.compute_density(x) assert res.shape == (N, ) # sampling capabilities assert measure.can_sample res = measure.get_samples(N) assert res.shape == (N, D)
def base_gp_data(): X = np.array([[-1, 1], [0, 0], [-2, 0.1]]) Y = np.array([[1], [2], [3]]) gpy_model = GPy.models.GPRegression( X=X, Y=Y, kernel=GPy.kern.RBF(input_dim=X.shape[1])) measure = IsotropicGaussianMeasure(mean=np.array([0.1, 1.8]), variance=0.8) qrbf = QuadratureRBFIsoGaussMeasure(RBFGPy(gpy_model.kern), measure=measure) base_gp = BaseGaussianProcessGPy(kern=qrbf, gpy_model=gpy_model) return base_gp, X, Y
def model_with_density(): rng = np.random.RandomState(42) x_init = rng.rand(5, 2) y_init = rng.rand(5, 1) gpy_kernel = GPy.kern.RBF(input_dim=x_init.shape[1]) gpy_model = GPy.models.GPRegression(X=x_init, Y=y_init, kernel=gpy_kernel) measure = IsotropicGaussianMeasure(mean=np.arange(x_init.shape[1]), variance=2.) qrbf = QuadratureRBFIsoGaussMeasure(RBFGPy(gpy_kernel), measure=measure) basegp = BaseGaussianProcessGPy(kern=qrbf, gpy_model=gpy_model) model = VanillaBayesianQuadrature(base_gp=basegp, X=x_init, Y=y_init) return model
def qrbf_iso_gauss_infinite(): x1 = np.array([[-1, 1], [0, 0], [-2, 0.1]]) x2 = np.array([[-1, 1], [0, 0], [-2, 0.1], [-3, 3]]) M1 = x1.shape[0] M2 = x2.shape[0] D = x1.shape[1] gpy_kernel = GPy.kern.RBF(input_dim=D) emukit_rbf = RBFGPy(gpy_kernel) measure = IsotropicGaussianMeasure(mean=np.arange(D), variance=2.) emukit_qrbf = QuadratureRBFIsoGaussMeasure(rbf_kernel=emukit_rbf, measure=measure) return emukit_qrbf, x1, x2, M1, M2, D
MEASURE_INTBOUNDS = "Uniform-finite" # === CHOOSE MEASURE ABOVE ====== x1 = np.array([[-1, 1], [0, 0], [-2, 0.1]]) x2 = np.array([[-1, 1], [0, 0], [-2, 0.1], [-3, 3]]) D = x1.shape[1] gpy_kernel = GPy.kern.RBF(input_dim=D) emukit_rbf = RBFGPy(gpy_kernel) if MEASURE_INTBOUNDS == "Lebesgue-finite": emukit_qrbf = QuadratureRBFLebesgueMeasure(emukit_rbf, integral_bounds=[(-1, 2), (-3, 3)]) elif MEASURE_INTBOUNDS == "GaussIso-infinite": measure = IsotropicGaussianMeasure(mean=np.arange(D), variance=2.0) emukit_qrbf = QuadratureRBFIsoGaussMeasure(rbf_kernel=emukit_rbf, measure=measure) elif MEASURE_INTBOUNDS == "Uniform-infinite": measure = UniformMeasure(bounds=[(0, 2), (-4, 3)]) emukit_qrbf = QuadratureRBFUniformMeasure(emukit_rbf, integral_bounds=None, measure=measure) elif MEASURE_INTBOUNDS == "Uniform-finite": measure = UniformMeasure(bounds=[(1, 2), (-4, 2)]) emukit_qrbf = QuadratureRBFUniformMeasure(emukit_rbf, integral_bounds=[(-1, 2), (-3, 3)], measure=measure) else: raise ValueError("Measure-integral-bounds combination not defined")
# choose model here: # METHOD = 'Bounded BQ lower' # METHOD = 'Bounded BQ upper' # METHOD = 'WSABI-l adapt' METHOD = "WSABI-l fixed" # the GPy model X = np.array([[-1, 1], [0, 0], [-2, 0.1]]) Y = np.array([[1], [2], [3]]) D = X.shape[1] gpy_model = GPy.models.GPRegression(X=X, Y=Y, kernel=GPy.kern.RBF(input_dim=D)) # the measure measure = IsotropicGaussianMeasure(mean=np.array([0.1, 1.8]), variance=0.8) # the emukit base GP qrbf = QuadratureRBFIsoGaussMeasure(RBFGPy(gpy_model.kern), measure=measure) base_gp = BaseGaussianProcessGPy(kern=qrbf, gpy_model=gpy_model) # the emukit bounded BQ model if METHOD == "Bounded BQ lower": bound = np.min(base_gp.Y) - 0.5 model = BoundedBayesianQuadrature(base_gp=base_gp, X=X, Y=Y, bound=bound, is_lower_bounded=True) elif METHOD == "Bounded BQ upper":
def base_gp(gpy_model): measure = IsotropicGaussianMeasure(mean=np.array([0.1, 1.8]), variance=0.8) qrbf = QuadratureRBFIsoGaussMeasure(RBFGPy(gpy_model.kern), measure=measure) return BaseGaussianProcessGPy(kern=qrbf, gpy_model=gpy_model)