pymc.gp.HSGP#

class pymc.gp.HSGP(m, L=None, c=None, drop_first=False, parameterization='noncentered', *, mean_func=<pymc.gp.mean.Zero object>, cov_func)[source]#

Hilbert Space Gaussian process approximation.

The gp.HSGP class is an implementation of the Hilbert Space Gaussian process. It is a reduced rank GP approximation that uses a fixed set of basis vectors whose coefficients are random functions of a stationary covariance function’s power spectral density. It’s usage is largely similar to gp.Latent. Like gp.Latent, it does not assume a Gaussian noise model and can be used with any likelihood, or as a component anywhere within a model. Also like gp.Latent, it has prior and conditional methods. It supports any sum of covariance functions that implement a power_spectral_density method.

For information on choosing appropriate m, L, and c, refer Ruitort-Mayol et. al. or to the PyMC examples that use HSGP.

To with with the HSGP in its “linearized” form, as a matrix of basis vectors and and vector of coefficients, see the method prior_linearized.

Parameters
m: list

The number of basis vectors to use for each active dimension (covariance parameter active_dim).

L: list

The boundary of the space for each active_dim. It is called the boundary condition. Choose L such that the domain [-L, L] contains all points in the column of X given by the active_dim.

c: float

The proportion extension factor. Used to construct L from X. Defined as S = max|X| such that X is in [-S, S]. L is the calculated as c * S. One of c or L must be provided. Further information can be found in Ruitort-Mayol et. al.

drop_first: bool

Default False. Sometimes the first basis vector is quite “flat” and very similar to the intercept term. When there is an intercept in the model, ignoring the first basis vector may improve sampling.

cov_func: None, 2D array, or instance of Covariance

The covariance function. Defaults to zero.

mean_func: None, instance of Mean

The mean function. Defaults to zero.

References

  • Ruitort-Mayol, G., and Anderson, M., and Solin, A., and Vehtari, A. (2022). Practical Hilbert Space Approximate Bayesian Gaussian Processes for Probabilistic Programming

  • Solin, A., Sarkka, S. (2019) Hilbert Space Methods for Reduced-Rank Gaussian Process Regression.

Examples

# A three dimensional column vector of inputs.
X = np.random.rand(100, 3)

with pm.Model() as model:
    # Specify the covariance function.
    # Three input dimensions, but we only want to use the last two.
    cov_func = pm.gp.cov.ExpQuad(3, ls=0.1, active_dims=[1, 2])

    # Specify the HSGP.
    # Use 25 basis vectors across each active dimension for a total of 25 * 25 = 625.
    # The value `c = 4` means the boundary of the approximation
    # lies at four times the half width of the data.
    # In this example the data lie between zero and one,
    # so the boundaries occur at -1.5 and 2.5.  The data, both for
    # training and prediction should reside well within that boundary..
    gp = pm.gp.HSGP(m=[25, 25], c=4.0, cov_func=cov_func)

    # Place a GP prior over the function f.
    f = gp.prior("f", X=X)

...

# After fitting or sampling, specify the distribution
# at new points with .conditional
Xnew = np.linspace(-1, 2, 50)[:, None]

with model:
    fcond = gp.conditional("fcond", Xnew=Xnew)

Methods

HSGP.__init__(m[, L, c, drop_first, ...])

HSGP.conditional(name, Xnew[, dims])

Returns the (approximate) conditional distribution evaluated over new input locations Xnew.

HSGP.marginal_likelihood(name, X, *args, ...)

HSGP.predict(Xnew[, point, given, diag, model])

HSGP.prior(name, X[, dims])

Returns the (approximate) GP prior distribution evaluated over the input locations X.

HSGP.prior_linearized(Xs)

Linearized version of the HSGP.

Attributes

L