class gpr::BayesianModelAveraging

Overview

Bayesian model averaging over hyperparameter grid. More…

#include <BayesianModelAveraging.h>
 
class BayesianModelAveraging {
public:
    // typedefs
 
    typedef std::function<std::tuple<EigenMatrix, EigenMatrix, Eigen::VectorXd>(double lengthscale, double noise)> KernelBuilder;
 
    // methods
 
    void setGrid(double log_ls_min, double log_ls_max, int n_ls, double log_noise_min, double log_noise_max, int n_noise);
    void fit(const Eigen::VectorXd& y, KernelBuilder kernel_builder, bool use_tp = false, double tp_a = 1e-20, double tp_b = 1e-20);
    BMAPrediction predict(const Eigen::VectorXd& y, KernelBuilder kernel_builder) const;
    int totalModels() const;
    const std::vector<double>& getWeights() const;
};

Detailed Documentation

Bayesian model averaging over hyperparameter grid.

For each (lengthscale, noise) pair on a grid:

  1. Evaluate the factorized likelihood

  2. Compute posterior weight from likelihood

  3. Average predictions weighted by posterior

The resulting variance includes both data uncertainty and hyperparameter uncertainty.

Typedefs

typedef std::function<std::tuple<EigenMatrix, EigenMatrix, Eigen::VectorXd>(double lengthscale, double noise)> KernelBuilder

Build function: given (lengthscale, noise) -> covariance matrix K.

Parameters:

lengthscale

Kernel lengthscale (log space)

noise

Noise variance (log space)

Returns:

Tuple of (K_XX matrix, K_test_X cross-covariance, k_test_test diagonal)

Methods

void setGrid(double log_ls_min, double log_ls_max, int n_ls, double log_noise_min, double log_noise_max, int n_noise)

Configure the hyperparameter grid.

Parameters:

log_ls_min

Minimum log10(lengthscale)

log_ls_max

Maximum log10(lengthscale)

n_ls

Number of lengthscale grid points

log_noise_min

Minimum log10(noise)

log_noise_max

Maximum log10(noise)

n_noise

Number of noise grid points

void fit(const Eigen::VectorXd& y, KernelBuilder kernel_builder, bool use_tp = false, double tp_a = 1e-20, double tp_b = 1e-20)

Evaluate likelihoods on the grid and compute posterior weights.

Parameters:

y

Training targets

kernel_builder

Function to build kernel matrices

use_tp

If true, use TP likelihood; if false, use GP

tp_a

TP hyperprior shape (ignored if use_tp=false)

tp_b

TP hyperprior scale (ignored if use_tp=false)

BMAPrediction predict(const Eigen::VectorXd& y, KernelBuilder kernel_builder) const

BMA-averaged prediction at test points.

Parameters:

y

Training targets (same as fit)

kernel_builder

Same builder as fit (for cross-covariance)

Returns:

BMAPrediction with mean, variance, and model count

const std::vector<double>& getWeights() const

Access posterior weights (for testing parallel correctness).