GaussianProcess

Overview

The GaussianProcess is designed to incorporate structures (data) and functions commonly used by every object that needs to use/modify Gaussian Processes such as GaussianProcessTrainer, GaussianProcessSurrogate, or Gaussian Process-based active learning objects. It contains accesses to the covariance function, stores covariance matrices and their corresponding decomposition and inverse action.

Initializing

The object which requires access to Gaussian Process-related functionalities shall have it as a member variable, which is important to enable restarting capabilities:

StochasticTools::GaussianProcess & _gp;
(contrib/moose/modules/stochastic_tools/include/trainers/GaussianProcessTrainer.h)

An important step is the initialization of the covariance function, which can either be done using the initialize function as in GaussianProcessTrainer:

_gp.initialize(getCovarianceFunctionByName(parameters.get<UserObjectName>("covariance_function")),
               tune_parameters,
               lower_bounds,
               upper_bounds);

_n_outputs = _gp.getCovarFunction().numOutputs();
(contrib/moose/modules/stochastic_tools/src/trainers/GaussianProcessTrainer.C)

Or by linking it directly as in GaussianProcessSurrogate:

_gp.linkCovarianceFunction(getCovarianceFunctionByName(covar_name));
(contrib/moose/modules/stochastic_tools/src/surrogates/GaussianProcessSurrogate.C)

Creating a covariance matrix

Once the covariance function has been added to the handler, one can use it to create a covariance matrix by either using setupCovarianceMatrix as in GaussianProcessTrainer:

_gp.setupCovarianceMatrix(_training_params, _training_data, _optimization_opts);
(contrib/moose/modules/stochastic_tools/src/trainers/GaussianProcessTrainer.C)

Or by simply calling the covariance matrix builder as in GaussianProcessSurrogate:

_gp.getCovarFunction().computeCovarianceMatrix(K_test, test_points, test_points, true);
(contrib/moose/modules/stochastic_tools/src/surrogates/GaussianProcessSurrogate.C)

Optimizing hyper parameters

As described in GaussianProcessTrainer, the covariance function might have hyper parameters that need to be optimized to be able to get accurate predictions from the corresponding Gaussian Processes. We can optimize these parameters during the generation of the Covariance matrix:

_gp.setupCovarianceMatrix(_training_params, _training_data, _optimization_opts);
(contrib/moose/modules/stochastic_tools/src/trainers/GaussianProcessTrainer.C)

Or by simply calling the optimizer with Adam (stochastic algorithm):


(contrib/moose/modules/stochastic_tools/src/utils/GaussianProcess.C)