예제 #1
0
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.)
예제 #2
0
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, )
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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")
예제 #9
0
    # 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":
예제 #10
0
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)