def test_expand(self):
     print 'expand'
     print '1d'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=0)
     expanded = grammar.expand_kernels(1, [k],
                                       base_kernels='SE',
                                       rules=None)
     for k in expanded:
         print '\n', k.pretty_print(), '\n'
     print '2d'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=0)
     expanded = grammar.expand_kernels(2, [k],
                                       base_kernels='SE',
                                       rules=None)
     for k in expanded:
         print '\n', k.pretty_print(), '\n'
     print '3d'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=0)
     expanded = grammar.expand_kernels(3, [k],
                                       base_kernels='SE',
                                       rules=None)
     for k in expanded:
         print '\n', k.pretty_print(), '\n'
     print '3d with two SEs'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=0)
     expanded = grammar.expand_kernels(3, [k + k.copy()],
                                       base_kernels='SE',
                                       rules=None)
     for k in expanded:
         print '\n', k.pretty_print(), '\n'
 def test_collapse_mult_idempotent(self):
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = k.copy()
     k = k1 * k2
     print '\n', k.pretty_print(), '\n'
     k = k.collapse_multiplicative_idempotency()
     assert (isinstance(k, ff.SqExpKernel)) and (k.dimension == 0)
     print '\n', k.pretty_print(), '\n'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = k.copy()
     k = ff.SqExpKernel(dimension=1, lengthscale=2, sf=2)
     k3 = k.copy()
     k4 = k.copy()
     k5 = ff.NoiseKernel(sf=-1)
     k6 = ff.ConstKernel(sf=1)
     k = k1 * k2 * k3 * k4 * k5 * k5.copy() + k6 + k6.copy()
     print '\n', k.pretty_print(), '\n'
     k = k.collapse_multiplicative_idempotency()
     print '\n', k.pretty_print(), '\n'
     k = k1 * k2 * k3 * k4 * k5 * k5.copy() * k6 * k6.copy()
     print '\n', k.pretty_print(), '\n'
     k = k.collapse_multiplicative_idempotency()
     print '\n', k.pretty_print(), '\n'
 def test_distribute_products_k(self):
     print 'distribute'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = k.copy()
     k = ff.SqExpKernel(dimension=1, lengthscale=2, sf=2)
     k3 = k.copy()
     k4 = k.copy()
     k5 = ff.NoiseKernel(sf=-1)
     k6 = ff.ConstKernel(sf=1)
     k = (k1 + k2 + k3) * (k4 + k5)
     print '\n', k.pretty_print(), '\n'
     components = k.distribute_products().simplified()
     print components
     print components.collapse_additive_idempotency()
     for k in components.operands:
         print '\n', k.pretty_print(), '\n'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = k.copy()
     k = ff.SqExpKernel(dimension=1, lengthscale=2, sf=2)
     k3 = k.copy()
     k4 = k.copy()
     k5 = ff.NoiseKernel(sf=-1)
     k6 = ff.ConstKernel(sf=1)
     k = (k1 * (k2 + k3)) + (k4 * k5)
     print '\n', k.pretty_print(), '\n'
     components = k.distribute_products().simplified()
     print components
     print components.collapse_additive_idempotency()
     for k in components.operands:
         print '\n', k.pretty_print(), '\n'
 def test_simplify(self):
     m = ff.GPModel(mean=ff.MeanZero(),
                    kernel=ff.SumKernel(operands=[
                        ff.ProductKernel(operands=[
                            ff.ConstKernel(sf=0.170186999131),
                            ff.SqExpKernel(dimension=0,
                                           lengthscale=1.02215322228,
                                           sf=5.9042619611)
                        ]),
                        ff.ProductKernel(operands=[
                            ff.NoiseKernel(sf=2.43188502201),
                            ff.ConstKernel(sf=-0.368638271154)
                        ]),
                        ff.ProductKernel(operands=[
                            ff.NoiseKernel(sf=1.47110516981),
                            ff.PeriodicKernel(dimension=0,
                                              lengthscale=-1.19651800365,
                                              period=0.550394248167,
                                              sf=0.131044872864)
                        ]),
                        ff.ProductKernel(operands=[
                            ff.SqExpKernel(dimension=0,
                                           lengthscale=3.33346140605,
                                           sf=3.7579461353),
                            ff.PeriodicKernel(dimension=0,
                                              lengthscale=0.669624964607,
                                              period=0.00216264543496,
                                              sf=2.41995024965)
                        ])
                    ]),
                    likelihood=ff.LikGauss(sf=-np.inf),
                    nll=599.59757993,
                    ndata=144)
     assert not m.simplified() == m
     m = ff.GPModel(mean=ff.MeanZero(),
                    kernel=ff.SumKernel(operands=[
                        ff.ProductKernel(operands=[
                            ff.ConstKernel(sf=0.170186999131),
                            ff.SqExpKernel(dimension=0,
                                           lengthscale=1.02215322228,
                                           sf=5.9042619611)
                        ]),
                        ff.ProductKernel(operands=[
                            ff.NoiseKernel(sf=2.43188502201),
                            ff.ConstKernel(sf=-0.368638271154)
                        ])
                    ]),
                    likelihood=ff.LikGauss(sf=-np.inf),
                    nll=599.59757993,
                    ndata=144)
     assert not m.simplified() == m
 def test_canonical_k(self):
     print 'canonical_k form'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = k.copy()
     k = ff.SqExpKernel(dimension=1, lengthscale=2, sf=2)
     k3 = k.copy()
     k4 = k.copy()
     k5 = ff.NoiseKernel(sf=-1)
     k6 = ff.ConstKernel(sf=1)
     k = k1 * k2 * k3 * k4 * k5 * k5.copy() + k6 + k6.copy(
     ) + k1.copy() * k1.copy() * k3.copy()
     print '\n', k.pretty_print(), '\n'
     print '\n', k.canonical().pretty_print(), '\n'
 def test_additive_form_k(self):
     print 'additive form'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = k.copy()
     k = ff.SqExpKernel(dimension=1, lengthscale=2, sf=2)
     k3 = k.copy()
     k4 = k.copy()
     k5 = ff.NoiseKernel(sf=-1)
     k6 = ff.ConstKernel(sf=1)
     k = (k1 * (k2 + k3)) + (k4 * k5)
     print '\n', k.pretty_print(), '\n'
     components = k.additive_form().simplified()
     print components
     for k in components.operands:
         print '\n', k.pretty_print(), '\n'
Beispiel #7
0
def removeKernelParams(kernel):
    """
    Remove hyperparameters of a GPSS kernel and reset them to None.

    :returns: a GPSS kernel without parameter initialisation
    """
    assert isinstance(
        kernel, ff.Kernel), "kernel must be of type flexible_function.Kernel"

    if isinstance(kernel, ff.SqExpKernel):
        return ff.SqExpKernel(dimension=kernel.dimension)

    elif isinstance(kernel, ff.PeriodicKernel):
        return ff.PeriodicKernel(dimension=kernel.dimension)

    elif isinstance(kernel, ff.ConstKernel):
        return ff.ConstKernel()

    elif isinstance(kernel, ff.SumKernel):
        return ff.SumKernel(map(removeKernelParams, kernel.operands))

    elif isinstance(kernel, ff.ProductKernel):
        return ff.ProductKernel(map(removeKernelParams, kernel.operands))

    elif isinstance(kernel, ff.NoneKernel):
        return kernel

    else:
        raise NotImplementedError("Unrecognised kernel type " +
                                  type(kernel).__name__)
 def test_nan_score(self):
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=0)
     m1 = ff.GPModel(kernel=k, nll=np.nan, ndata=100)
     m2 = ff.GPModel(kernel=k.copy(), nll=0, ndata=100)
     (not_nan, eq_nan) = experiment.remove_nan_scored_models([m1, m2],
                                                             score='bic')
     assert (len(not_nan) == 1) and (len(eq_nan) == 1)
 def test_expand_model(self):
     print 'expand model'
     print '2d'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=0)
     m = ff.GPModel(mean=ff.MeanZero(), kernel=k, likelihood=ff.LikGauss())
     expanded = grammar.expand_models(2, [m], base_kernels='SE', rules=None)
     for k in expanded:
         print '\n', k.pretty_print(), '\n'
 def test_repr(self):
     m = ff.MeanZero()
     k = ff.SqExpKernel()
     l = ff.LikGauss()
     regression_model = ff.GPModel(mean=m, kernel=k, likelihood=l)
     print regression_model
     print ff.repr_to_model(regression_model.__repr__())
     assert regression_model == ff.repr_to_model(
         regression_model.__repr__())
 def test_collapse_identity(self):
     print 'collapse identity'
     k1 = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k2 = ff.ConstKernel(sf=-1)
     k = k1 * k2
     print '\n', k.pretty_print(), '\n'
     k = k.collapse_multiplicative_identity()
     assert isinstance(k, ff.SqExpKernel)
     print '\n', k.pretty_print(), '\n'
     k1 = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k = (k1 + k1.copy() + k1.copy() * k2.copy()) * k2
     print(k1 + k1.copy()).sf
     print(k1.copy() * k2.copy()).sf
     print(k1 + k1.copy() + k1.copy() * k2.copy()).sf
     print k.sf
     print '\n', k.pretty_print(), '\n'
     k = k.collapse_multiplicative_identity()
     print '\n', k.pretty_print(), '\n'
 def test_simplified_k(self):
     print 'simplified_k'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = k.copy()
     k = k1 * k2
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = k.copy()
     k = ff.SqExpKernel(dimension=1, lengthscale=2, sf=2)
     k3 = k.copy()
     k4 = k.copy()
     k5 = ff.NoiseKernel(sf=-1)
     k6 = ff.ConstKernel(sf=1)
     k = k1 * k2 * k3 * k4 * k5 * k5.copy() + k6 + k6.copy(
     ) + k1.copy() * k1.copy() * k3.copy()
     print '\n', k.pretty_print(), '\n'
     k = k.simplified()
     print '\n', k.pretty_print(), '\n'
 def test_jitter(self):
     print 'jitter'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = k.copy()
     print[k, k1, k2]
     assert (k == k1) and (k == k2) and (k1 == k2)
     ff.add_jitter_k([k1, k2])
     assert (not k == k1) and (not k == k2) and (not k1 == k2)
     print[k, k1, k2]
 def test_hash_and_cmp(self):
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = k.copy()
     k3 = ff.SqExpKernel(dimension=1, lengthscale=0, sf=1)
     assert sorted(list(set([k1, k2, k3]))) == sorted([k1, k3])
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k4 = k.copy()
     k5 = ff.NoneKernel()
     k6 = ff.ChangePointKernel(operands=[k4, k5])
     k7 = ff.ChangePointKernel(
         operands=[ff.ChangePointKernel(operands=[k4, k5]), k1])
     assert sorted([k1, k2, k3, k4, k5, k6,
                    k7]) == sorted([k7, k1, k6, k2, k5, k3, k4])
     assert sorted(k.canonical()
                   for k in [k1, k2, k3, k4, k5, k6, k7]) == sorted(
                       k.canonical() for k in [k7, k1, k6, k2, k5, k3, k4])
     assert sorted(k.additive_form()
                   for k in [k1, k2, k3, k4, k5, k6, k7]) == sorted(
                       k.additive_form()
                       for k in [k7, k1, k6, k2, k5, k3, k4])
 def test_jitter_model(self):
     print 'jitter model'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = k.copy()
     print[k, k1, k2]
     assert (k == k1) and (k == k2) and (k1 == k2)
     m1 = ff.GPModel(kernel=k1)
     m2 = ff.GPModel(kernel=k2)
     ff.add_jitter([m1, m2])
     assert (not k == k1) and (not k == k2) and (not k1 == k2)
     print[k, k1, k2]
 def test_collapse_add_idempotent(self):
     k = ff.SqExpKernel()
     k1 = k.copy()
     k2 = k.copy()
     k = ff.NoiseKernel(sf=-1)
     k3 = k.copy()
     k4 = k.copy()
     k = ff.ConstKernel(sf=1)
     k5 = k.copy()
     k6 = k.copy()
     k = k1 + k2 + k3 + k4 + k5 + k6
     print '\n', k.pretty_print(), '\n'
     k = k.collapse_additive_idempotency()
     print '\n', k.pretty_print(), '\n'
 def test_prod(self):
     k = ff.SqExpKernel()
     k1 = k.copy()
     k2 = k.copy()
     k = k1 * k2
     print '\n', k.pretty_print(), '\n'
     print '\n', k.syntax, '\n'
     print '\n', k, '\n'
     k.operands[0].dimension = 0
     k.operands[1].dimension = 1
     print '\n', k.pretty_print(), '\n'
     print '\n', k.syntax, '\n'
     print '\n', k, '\n'
     print '\n', k.get_gpml_expression(dimensions=3), '\n'
     k.initialise_params(data_shape={
         'y_sd': 0,
         'x_sd': [0, 2],
         'x_min': [-10, -100],
         'x_max': [10, 100]
     })
     print '\n', k, '\n'
     assert k == k.copy()
     k = k.copy()
     print '\n', k, '\n'
     assert k == k.copy()
     k.load_param_vector(k.param_vector)
     print '\n', k, '\n'
     k = k + k.copy()
     print '\n', k.pretty_print(), '\n'
     print '\n', k.syntax, '\n'
     print '\n', k, '\n'
     print '\n', k.pretty_print(), '\n'
     print '\n', k.syntax, '\n'
     print '\n', k, '\n'
     print '\n', k.get_gpml_expression(dimensions=3), '\n'
     k.initialise_params(data_shape={
         'y_sd': 0,
         'x_sd': [0, 2],
         'x_min': [-10, -100],
         'x_max': [10, 100]
     })
     print '\n', k, '\n'
     assert k == k.copy()
     k = k.copy()
     print '\n', k, '\n'
     assert k == k.copy()
     k.load_param_vector(k.param_vector)
     print '\n', k, '\n'
     k.sf
 def test_model(self):
     print 'model'
     m = ff.MeanZero()
     k = ff.SqExpKernel()
     l = ff.LikGauss()
     regression_model = ff.GPModel(mean=m,
                                   kernel=k,
                                   likelihood=l,
                                   nll=0,
                                   ndata=100)
     print '\n', regression_model.pretty_print(), '\n'
     print '\n', regression_model.__repr__(), '\n'
     print regression_model.bic
     print regression_model.aic
     print regression_model.pl2
     print ff.GPModel.score(regression_model, criterion='nll')
 def test_canonical_k_2(self):
     print 'canonical_k form 2'
     k = ff.SqExpKernel(dimension=0, lengthscale=0, sf=1)
     k1 = k.copy()
     k2 = ff.NoneKernel()
     k = ff.ChangePointKernel(operands=[k1, k2])
     print '\n', k, '\n'
     k = k.canonical()
     print '\n', k, '\n'
     assert k == k1
     k = ff.ChangePointKernel(
         operands=[ff.ChangePointKernel(operands=[k1, k2]), k2])
     print '\n', k, '\n'
     k = k.canonical()
     print '\n', k, '\n'
     assert k == k1
Beispiel #20
0
def gpy2gpss(kernel):
    """
    Convert a GPy kernel to a GPSS kernel recursively.

    Support only:
    1) 1-D squared exponential kernels
    2) 1-D periodic kernels
    3) constant kernels (called `bias` in GPy)
    4) sum kernels
    5) product kernels

    :param kernel: a GPSS kernel as defined in flexible_function.py
    :returns: an object of type GPy.kern.Kern
    """
    assert isinstance(kernel,
                      GPy.kern.Kern), "kernel must be of type GPy.kern.Kern"

    if isinstance(kernel, GPy.kern.RBF):
        sf = np.sqrt(kernel.variance)[0]
        ls = kernel.lengthscale[0]
        dim = kernel.active_dims[0]
        return ff.SqExpKernel(dimension=dim, lengthscale=ls, sf=sf)

    elif isinstance(kernel, GPy.kern.StdPeriodic):
        sf = np.sqrt(kernel.variance)[0]
        ls = kernel.lengthscale[0]
        per = kernel.period[0]
        dim = kernel.active_dims[0]
        return ff.PeriodicKernel(dimension=dim,
                                 lengthscale=ls,
                                 period=per,
                                 sf=sf)

    elif isinstance(kernel, GPy.kern.Bias):
        sf = np.sqrt(kernel.variance)[0]
        return ff.ConstKernel(sf=sf)

    elif isinstance(kernel, GPy.kern.Add):
        return ff.SumKernel(map(gpy2gpss, kernel.parts))

    elif isinstance(kernel, GPy.kern.Prod):
        return ff.ProductKernel(map(gpy2gpss, kernel.parts))

    else:
        raise NotImplementedError("Cannot translate kernel of type " +
                                  type(kernel).__name__)
 def test_restarts(self):
     print 'restart'
     data_shape = {
         'y_sd': 0,
         'x_sd': [0, 2],
         'x_min': [-10, -100],
         'x_max': [10, 100]
     }
     k = ff.SqExpKernel(dimension=0)
     k1 = k.copy()
     k2 = k.copy()
     print[k, k1, k2]
     assert (k == k1) and (k == k2) and (k1 == k2)
     kernel_list = ff.add_random_restarts_k([k1, k2],
                                            data_shape=data_shape,
                                            sd=1)
     k1 = kernel_list[0]
     k2 = kernel_list[1]
     assert (not k == k1) and (not k == k2) and (not k1 == k2)
     print[k, k1, k2]
 def test_restarts_model(self):
     print 'restart model'
     data_shape = {
         'y_sd': 0,
         'x_sd': [0, 2],
         'x_min': [-10, -100],
         'x_max': [10, 100]
     }
     k = ff.SqExpKernel(dimension=0)
     k1 = k.copy()
     k2 = k.copy()
     print[k, k1, k2]
     assert (k == k1) and (k == k2) and (k1 == k2)
     m1 = ff.GPModel(kernel=k1)
     m2 = ff.GPModel(kernel=k2)
     model_list = ff.add_random_restarts([m1, m2],
                                         n_rand=1,
                                         data_shape=data_shape,
                                         sd=1)
     k1 = model_list[0].kernel
     k2 = model_list[1].kernel
     assert (not k == k1) and (not k == k2) and (not k1 == k2)
     print[k, k1, k2]