Makes a kernel act on some input columns only: \(k_S(x, x') = k(x_S, x'_S)\) for the selected columns \(S\). Sums of restricted kernels give additive models such as \(f(x) = f_1(x_1) + f_2(x_2, x_3)\).
Details
A restricted kernel is positive semidefinite whenever kernel is, because
it is kernel composed with a linear projection. A sum
\(\sum_j k_j(x_{S_j}, x'_{S_j})\) is the covariance of
\(f(x) = \sum_j f_j(x_{S_j})\) with independent components \(f_j\).
The selection is not a hyperparameter. It adds no parameter and no level
to parameter paths: select_dimensions(rbf_kernel(), 2) has the paths
variance and length_scale, like rbf_kernel(). ARD parameters of
kernel have one value per selected column.
Columns index the inputs the kernel receives. The number of input columns is not known when a specification is built, so column indices and ARD lengths are checked when the kernel is evaluated and when a model is fitted. Derivatives with respect to unselected input columns are zero.
Stability
Stable: from version 1.0.0 this interface changes incompatibly only in a major release, after a deprecation period. Results and options that concern an experimental model class, kernel, or argument follow that interface's tier. See gaussianprocesses-package for the policy.
Examples
# An additive model f(x) = f1(x1) + f2(x2, x3).
kernel <- sum_kernel(
select_dimensions(rbf_kernel(length_scale = 0.5), 1),
select_dimensions(matern52_kernel(length_scale = c(1, 2)), 2:3)
)
kernel
#> SumKernel(
#> SelectDimensions(columns=1,
#> RBF(variance=1, length_scale=0.5)
#> )
#> SelectDimensions(columns=c(2, 3),
#> Matern-5/2(variance=1, length_scale=c(1, 2))
#> )
#> )
names(kernel_parameters(kernel, flatten = TRUE))
#> [1] "kernel1.variance" "kernel1.length_scale"
#> [3] "kernel2.variance" "kernel2.length_scale[1]"
#> [5] "kernel2.length_scale[2]"
x <- cbind(c(0, 0.5, 1), c(1, 0, -1), c(2, 2, 0))
all.equal(
evaluate_kernel(kernel, x),
evaluate_kernel(rbf_kernel(length_scale = 0.5), x[, 1]) +
evaluate_kernel(matern52_kernel(length_scale = c(1, 2)), x[, 2:3])
)
#> [1] TRUE