Kernels
Kernels specific to state-space GPs (e.g. TruncatedPeriodic) and the to_sde dispatcher.
TruncatedPeriodic
TruncatedPeriodic(
*,
active_dims=None,
lengthscale=1.0,
variance=1.0,
period=1.0,
truncation_order=6,
n_dims=None,
compute_engine=None,
)
Bases: StationaryKernel
Truncated-Fourier approximation of the periodic kernel.
See Solin & Särkkä (2014). The kernel is the truncated cosine series
k(τ) = σ² · (Ĩ_0(c) + 2 Σ_{k=1}^{K} Ĩ_k(c) cos(2π k τ / period))
where Ĩ_k(c) = e^{-c} I_k(c) is the scaled modified Bessel function and
c = 1/(4ℓ²). Acceptance of a 1-D temporal input is enforced by
_validate_temporal_kernel at to_sde time, not here.
Example:
>>> from gpjax.state_space import TruncatedPeriodic
>>> kernel = TruncatedPeriodic(
... lengthscale=1.0, variance=1.0, period=1.0, truncation_order=6,
... )
>>> kernel.truncation_order
6
spectral_density
property
The normalised spectral measure \(p(\boldsymbol{\omega})\) of the kernel.
By Bochner's theorem, a stationary kernel is the Fourier transform of a finite measure. This property returns that measure normalised to a probability distribution over \(\mathbb{R}^D\), so that
The measure depends on the lengthscale \(\ell\) (as an inverse scale) but not on the variance \(\sigma^2\): the variance is the measure's total mass, which normalisation divides out, and it re-enters as the explicit prefactor above. The unnormalised spectral density of Rasmussen & Williams (2006, §4.2.1) is recovered as \(S(\boldsymbol{\omega}) = \sigma^2 (2\pi)^D p(\boldsymbol{\omega})\) under the convention \(k(\boldsymbol{\tau}) = (2\pi)^{-D}\int S(\boldsymbol{\omega}) e^{i\boldsymbol{\omega}^\top\boldsymbol{\tau}}\,d\boldsymbol{\omega}\).
Returns:
-
MultivariateNormal | MultivariateStudentT–The spectral measure as a \(D\)-dimensional numpyro distribution.
cross_covariance
Compute the cross-covariance matrix of the kernel.
Parameters:
-
x(Num[Array, 'N D']) –the first input matrix of shape
(N, D). -
y(Num[Array, 'M D']) –the second input matrix of shape
(M, D).
Returns:
-
Float[Array, 'N M']–The cross-covariance matrix of the kernel of shape
(N, M).
gram
Compute the gram matrix of the kernel.
Parameters:
-
x(Num[Array, 'N D']) –the input matrix of shape
(N, D).
Returns:
-
AbstractLinearOperator–The gram matrix of the kernel of shape
(N, N).
diagonal
Compute the diagonal of the gram matrix of the kernel.
Parameters:
-
x(Num[Array, 'N D']) –the input matrix of shape
(N, D).
Returns:
-
AbstractLinearOperator–The diagonal of the gram matrix of the kernel of shape
(N,).
slice_input
Slice out the relevant columns of the input matrix.
Select the relevant columns of the supplied matrix to be used within the kernel's evaluation.
Parameters:
-
x(Float[Array, '... D']) –the matrix or vector that is to be sliced.
Returns:
-
Float[Array, '... Q']–The sliced form of the input matrix.
__add__
Add two kernels together. Args: other (AbstractKernel): The kernel to be added to the current kernel.
Returns:
-
AbstractKernel(AbstractKernel) –A new kernel that is the sum of the two kernels.
__mul__
Multiply two kernels together.
Parameters:
-
other(AbstractKernel) –The kernel to be multiplied with the current kernel.
Returns:
-
AbstractKernel(AbstractKernel) –A new kernel that is the product of the two kernels.
to_sde
Convert a kernel to its state-space (linear SDE) representation.
Default handler raises NotImplementedError listing supported kernels.
Example: