CMP++: Uncertainty Quantification & Bayesian Calibration
Loading...
Searching...
No Matches
multi_gp.h
Go to the documentation of this file.
1#ifndef MULTI_GP_H
2#define MULTI_GP_H
3
4#include "gp.h"
5
10namespace cmp::gp {
27
28 private:
29
30 // Base components
31 std::vector<GaussianProcess> gps_;
32
33 // Observations (the GP can own the data or point to external data, if it owns the data the pointer will point to it)
34 Eigen::MatrixXd xObs_;
35 Eigen::MatrixXd yObs_;
36 std::optional<Eigen::Ref<const Eigen::MatrixXd>> pXObs_;
37 std::optional<Eigen::Ref<const Eigen::MatrixXd>> pYObs_;
38
39
40
41 public:
42
43 // Constructors and destructor
45 MultiOutputGaussianProcess(const size_t &nGps, const std::shared_ptr<covariance::Covariance> &kernel, const std::shared_ptr<mean::Mean> &mean, const Eigen::Ref<const Eigen::VectorXd> &params, double nugget = 1e-8);
47
48 // Copy and move constructors and assignment operators
53
54
63 void set(const size_t &nGps, const std::shared_ptr<covariance::Covariance> &kernel, const std::shared_ptr<mean::Mean> &mean, const Eigen::Ref<const Eigen::VectorXd> &params, double nugget = 1e-8);
64
72 void condition(const Eigen::Ref<const Eigen::MatrixXd> &xObs, const Eigen::Ref<const Eigen::MatrixXd> &yObs, bool copyData = true);
73
74
88 void fit(const Eigen::Ref<Eigen::MatrixXd> &xObs, const Eigen::Ref<Eigen::MatrixXd> &yObs, const Eigen::Ref<const Eigen::VectorXd> &lb, const Eigen::Ref<const Eigen::VectorXd> &ub, const method &method = MLE, const nlopt::algorithm &alg = nlopt::LN_SBPLX, const double &tol_rel = 1e-3, bool copyData = true, const std::shared_ptr<cmp::prior::Prior> &prior = cmp::prior::Uniform::make(), const std::vector<bool> &logScale = {});
89
90 std::pair<Eigen::VectorXd, Eigen::MatrixXd> predict(const Eigen::Ref<const Eigen::VectorXd> &x, const type &t = type::POSTERIOR) const;
91
93 return gps_.at(i);
94 }
95
100 size_t size() const {
101 return gps_.size();
102 }
103
110 Eigen::VectorXd predictMean(const Eigen::Ref<const Eigen::VectorXd> &x, const type &t = type::POSTERIOR) const;
111};
112
113
114}
117#endif
This class implements a Gaussian Process (GP) regression model for non-parametric Bayesian regression...
Definition gp.h:79
Manages a collection of independent Gaussian Processes for multi-output regression.
Definition multi_gp.h:26
MultiOutputGaussianProcess & operator=(MultiOutputGaussianProcess &&other) noexcept=default
MultiOutputGaussianProcess & operator=(const MultiOutputGaussianProcess &other)=default
void fit(const Eigen::Ref< Eigen::MatrixXd > &xObs, const Eigen::Ref< Eigen::MatrixXd > &yObs, const Eigen::Ref< const Eigen::VectorXd > &lb, const Eigen::Ref< const Eigen::VectorXd > &ub, const method &method=MLE, const nlopt::algorithm &alg=nlopt::LN_SBPLX, const double &tol_rel=1e-3, bool copyData=true, const std::shared_ptr< cmp::prior::Prior > &prior=cmp::prior::Uniform::make(), const std::vector< bool > &logScale={})
Fit the Gaussian Process to the observations.
Definition multi_gp.cpp:56
MultiOutputGaussianProcess()
Definition multi_gp.cpp:3
MultiOutputGaussianProcess(MultiOutputGaussianProcess &&other) noexcept=default
size_t size() const
Returns the number of output dimensions (the number of GP models).
Definition multi_gp.h:100
MultiOutputGaussianProcess(const MultiOutputGaussianProcess &other)=default
void condition(const Eigen::Ref< const Eigen::MatrixXd > &xObs, const Eigen::Ref< const Eigen::MatrixXd > &yObs, bool copyData=true)
Set the values of the observations.
Definition multi_gp.cpp:28
Eigen::MatrixXd xObs_
Owning training input matrix.
Definition multi_gp.h:34
std::optional< Eigen::Ref< const Eigen::MatrixXd > > pXObs_
Non-owning reference wrapper to training input matrix.
Definition multi_gp.h:36
Eigen::VectorXd predictMean(const Eigen::Ref< const Eigen::VectorXd > &x, const type &t=type::POSTERIOR) const
Predicts the output mean vector at the test point x.
Definition multi_gp.cpp:88
Eigen::MatrixXd yObs_
Owning training output target matrix.
Definition multi_gp.h:35
void set(const size_t &nGps, const std::shared_ptr< covariance::Covariance > &kernel, const std::shared_ptr< mean::Mean > &mean, const Eigen::Ref< const Eigen::VectorXd > &params, double nugget=1e-8)
Set the number of Gaussian Processes and their parameters.
Definition multi_gp.cpp:14
GaussianProcess & operator[](const int &i)
Definition multi_gp.h:92
std::pair< Eigen::VectorXd, Eigen::MatrixXd > predict(const Eigen::Ref< const Eigen::VectorXd > &x, const type &t=type::POSTERIOR) const
Definition multi_gp.cpp:77
std::optional< Eigen::Ref< const Eigen::MatrixXd > > pYObs_
Non-owning reference wrapper to training output target matrix.
Definition multi_gp.h:37
std::vector< GaussianProcess > gps_
Collection of single-output Gaussian Process models.
Definition multi_gp.h:31
static std::shared_ptr< Prior > make()
Definition prior++.h:114
Definition gp.h:17
type
GP evaluation type.
Definition gp.h:31
@ POSTERIOR
Posterior GP response (conditioned on training data)
Definition gp.h:33
method
Optimization method for GP hyperparameters.
Definition gp.h:22
@ MLE
Maximum Likelihood Estimation (maximizing marginal likelihood)
Definition gp.h:23