class, L=None, c=None, drop_first=False, parametrization='noncentered', *, mean_func=< 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. Its 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. (Note, this excludes the Periodic covariance function, which uses a different set of basis functions for a low rank approximation, as described in HSGPPeriodic.).

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

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

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 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. This argument will be deprecated in future versions.

parametrization: str

Whether to use the centered or noncentered parametrization when multiplying the basis by the coefficients.

cov_func: Covariance function, must be an instance of `Stationary` and implement a

power_spectral_density method.

mean_func: None, instance of Mean

The mean function. Defaults to zero.


  • 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.


# 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 =, 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 =[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)


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[, hsgp_coeffs_dims, gp_dims])

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


Linearized version of the HSGP.