84 std::shared_ptr<covariance::Covariance>
pKernel_;
89 std::optional<Eigen::MatrixXd>
xObs_;
90 std::optional<Eigen::VectorXd>
yObs_;
91 std::optional<Eigen::Ref<const Eigen::MatrixXd>>
pXObs_;
92 std::optional<Eigen::Ref<const Eigen::VectorXd>>
pYObs_;
106 void compute(
const Eigen::Ref<const Eigen::VectorXd> &par);
115 GaussianProcess(
const std::shared_ptr<covariance::Covariance> &kernel,
const std::shared_ptr<mean::Mean> &mean, Eigen::Ref<const Eigen::VectorXd> params,
double nugget = 1e-8);
132 void set(
const std::shared_ptr<covariance::Covariance> &kernel,
const std::shared_ptr<mean::Mean> &mean, Eigen::Ref<const Eigen::VectorXd> params,
double nugget = 1e-8);
144 void condition(
const Eigen::Ref<const Eigen::MatrixXd> &xObs,
const Eigen::Ref<const Eigen::VectorXd> &yObs,
bool copyData =
true,
bool normalizeY =
false);
162 void fit(
const Eigen::Ref<const Eigen::MatrixXd> &xObs,
const Eigen::Ref<const Eigen::VectorXd> &yObs,
const Eigen::Ref<const Eigen::VectorXd> &lb,
const Eigen::Ref<const Eigen::VectorXd> &ub,
const method &
method,
const nlopt::algorithm &alg,
const double &tol_rel,
bool copyData =
true,
bool normalizeY =
false,
const std::shared_ptr<cmp::prior::Prior> &prior =
cmp::prior::Uniform::make(),
const std::vector<bool> &logScale = {});
176 std::shared_ptr<cmp::mean::Mean>
getMean()
const {
184 std::shared_ptr<cmp::covariance::Covariance>
getKernel()
const {
205 Eigen::MatrixXd covariance(Eigen::Ref<const Eigen::VectorXd> par)
const;
212 Eigen::MatrixXd
covarianceGradient(Eigen::Ref<const Eigen::VectorXd> par,
const int &i)
const;
220 Eigen::MatrixXd
covarianceHessian(Eigen::Ref<const Eigen::VectorXd> par,
const size_t &i,
const size_t &j)
const;
238 const Eigen::Ref<const Eigen::MatrixXd> &
getXObs()
const {
242 const Eigen::Ref<const Eigen::VectorXd> &
getYObs()
const {
254 return static_cast<size_t>(
pXObs_->rows());
265 Eigen::VectorXd
priorMean(Eigen::Ref<const Eigen::VectorXd> par)
const;
273 Eigen::VectorXd
priorMeanGradient(Eigen::Ref<const Eigen::VectorXd> par,
const int &i)
const;
280 Eigen::VectorXd
residual(Eigen::Ref<const Eigen::VectorXd> par)
const;
330 std::pair<double, double>
predictLOO(
const size_t &i)
const;
355 const Eigen::Ref<const Eigen::MatrixXd> &x_pending,
362 double objectiveFunction(
const Eigen::Ref<const Eigen::VectorXd> &x, Eigen::Ref<Eigen::VectorXd> grad,
const std::shared_ptr<cmp::prior::Prior> &prior);
364 double objectiveFunctionLOO(
const Eigen::Ref<const Eigen::VectorXd> &x, Eigen::Ref<Eigen::VectorXd> grad,
const std::shared_ptr<cmp::prior::Prior> &prior);
366 double objectiveFunctionLOOMSE(
const Eigen::Ref<const Eigen::VectorXd> &x, Eigen::Ref<Eigen::VectorXd> grad,
const std::shared_ptr<cmp::prior::Prior> &prior);
This class implements a Gaussian Process (GP) regression model for non-parametric Bayesian regression...
Definition gp.h:79
std::optional< Eigen::VectorXd > yObs_
Owning storage for training target vector.
Definition gp.h:90
Eigen::VectorXd residual_
Residuals of the mean function: y - m(x).
Definition gp.h:98
double predictMean(const Eigen::Ref< const Eigen::VectorXd > &x, type predictionType=type::POSTERIOR) const
Compute the predictive mean at a new point.
Definition gp.cpp:389
const Eigen::Ref< const Eigen::MatrixXd > & getXObs() const
Definition gp.h:238
Eigen::VectorXd diagCovInverse_
Diagonal elements of the inverse covariance matrix.
Definition gp.h:97
std::pair< Eigen::VectorXd, Eigen::MatrixXd > predictMultiple(const Eigen::Ref< const Eigen::MatrixXd > &x_pts, type predictionType=type::POSTERIOR) const
Compute the predictive variance at a new set of points.
Definition gp.cpp:416
Eigen::VectorXd priorMean(Eigen::Ref< const Eigen::VectorXd > par) const
Evaluates the mean on the observations.
Definition gp.cpp:257
std::shared_ptr< cmp::mean::Mean > getMean() const
Gets the shared pointer to the GP prior mean function.
Definition gp.h:176
double nugget_
Observation noise variance (nugget).
Definition gp.h:86
const Eigen::Ref< const Eigen::VectorXd > & getYObs() const
Definition gp.h:242
std::pair< double, double > predict(const Eigen::Ref< const Eigen::VectorXd > &x, type predictionType=type::POSTERIOR) const
Compute the predictive mean and variance at a new point.
Definition gp.cpp:350
std::optional< Eigen::Ref< const Eigen::VectorXd > > pYObs_
Reference wrapper to training target vector.
Definition gp.h:92
std::optional< Eigen::MatrixXd > xObs_
Owning storage for training input matrix.
Definition gp.h:89
void compute(const Eigen::Ref< const Eigen::VectorXd > &par)
Definition gp.cpp:5
GaussianProcess & operator=(const GaussianProcess &other)
Definition gp.cpp:55
double logLikelihoodLOO(const size_t &i) const
Compute the leave-one-out log-likelihood of the observations given the hyperparameters.
Definition gp.cpp:570
const Eigen::VectorXd & getDiagCovInverse() const
Definition gp.h:230
std::pair< double, double > predictLOO(const size_t &i) const
Compute the leave-one-out predictive mean and variance at the i-th observation point.
Definition gp.cpp:546
std::shared_ptr< mean::Mean > pMean_
Prior mean function.
Definition gp.h:85
std::shared_ptr< covariance::Covariance > pKernel_
Covariance kernel function.
Definition gp.h:84
Eigen::MatrixXd covarianceHessian(Eigen::Ref< const Eigen::VectorXd > par, const size_t &i, const size_t &j) const
Definition gp.cpp:230
Eigen::VectorXd par_
Model hyperparameters.
Definition gp.h:83
Eigen::VectorXd residual(Eigen::Ref< const Eigen::VectorXd > par) const
Evaluate the difference between the observation and the mean function.
Definition gp.cpp:276
double getNugget() const
Gets the observation noise variance (nugget).
Definition gp.h:192
void set(const std::shared_ptr< covariance::Covariance > &kernel, const std::shared_ptr< mean::Mean > &mean, Eigen::Ref< const Eigen::VectorXd > params, double nugget=1e-8)
Definition gp.cpp:109
std::optional< Eigen::Ref< const Eigen::MatrixXd > > pXObs_
Reference wrapper to training input matrix.
Definition gp.h:91
const Eigen::LDLT< Eigen::MatrixXd > & getCovDecomposition() const
Definition gp.h:222
const Eigen::VectorXd & getAlpha() const
Definition gp.h:226
cmp::scaler::StandardScaler yScaler_
Scaler used to normalize the target vector.
Definition gp.h:102
double logLikelihood() const
Compute the log-likelihood of the observations given the hyperparameters.
Definition gp.cpp:564
bool normalizeY_
Flag indicating whether target normalization is active.
Definition gp.h:101
void fit(const Eigen::Ref< const Eigen::MatrixXd > &xObs, const Eigen::Ref< const Eigen::VectorXd > &yObs, const Eigen::Ref< const Eigen::VectorXd > &lb, const Eigen::Ref< const Eigen::VectorXd > &ub, const method &method, const nlopt::algorithm &alg, const double &tol_rel, bool copyData=true, bool normalizeY=false, 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 gp.cpp:289
~GaussianProcess()=default
std::shared_ptr< cmp::covariance::Covariance > getKernel() const
Gets the shared pointer to the GP covariance kernel.
Definition gp.h:184
Eigen::VectorXd priorMeanGradient(Eigen::Ref< const Eigen::VectorXd > par, const int &i) const
Evaluate the gradient of the mean function.
Definition gp.cpp:267
const Eigen::VectorXd & getResidualVector() const
Definition gp.h:234
Eigen::VectorXd predictMeanMultiple(const Eigen::Ref< const Eigen::MatrixXd > &x_pts, type predictionType=type::POSTERIOR) const
Compute the predictive mean at a new set of points.
Definition gp.cpp:498
Eigen::MatrixXd covarianceGradient(Eigen::Ref< const Eigen::VectorXd > par, const int &i) const
Definition gp.cpp:207
void condition(const Eigen::Ref< const Eigen::MatrixXd > &xObs, const Eigen::Ref< const Eigen::VectorXd > &yObs, bool copyData=true, bool normalizeY=false)
Condition the GP on a set of observations (allow predictive posterior computation)
Definition gp.cpp:139
size_t nObs() const
Returns the number of training observations.
Definition gp.h:250
GaussianProcess()
Definition gp.cpp:26
double objectiveFunctionLOO(const Eigen::Ref< const Eigen::VectorXd > &x, Eigen::Ref< Eigen::VectorXd > grad, const std::shared_ptr< cmp::prior::Prior > &prior)
Definition gp.cpp:730
Eigen::VectorXd getParameters() const
Get the hyperparameters of the Gaussian Process.
Definition gp.h:168
Eigen::MatrixXd expectedVarianceImprovement(const Eigen::Ref< const Eigen::MatrixXd > &x_pts, const Eigen::Ref< const Eigen::MatrixXd > &x_pending, double nu) const
Definition gp.cpp:587
Eigen::LDLT< Eigen::MatrixXd > covDecomposition_
LDLT decomposition of the training covariance matrix.
Definition gp.h:95
double objectiveFunction(const Eigen::Ref< const Eigen::VectorXd > &x, Eigen::Ref< Eigen::VectorXd > grad, const std::shared_ptr< cmp::prior::Prior > &prior)
Definition gp.cpp:692
double objectiveFunctionLOOMSE(const Eigen::Ref< const Eigen::VectorXd > &x, Eigen::Ref< Eigen::VectorXd > grad, const std::shared_ptr< cmp::prior::Prior > &prior)
Definition gp.cpp:819
Eigen::VectorXd alpha_
GP weights vector: alpha = (K + s^2 I)^-1 (y - m).
Definition gp.h:96
Standardizes features by removing the mean and scaling to unit variance using Cholesky decomposition.
Definition scaler.h:90
type
GP evaluation type.
Definition gp.h:31
@ PRIOR
Prior GP response (before conditioning on training data)
Definition gp.h:32
@ POSTERIOR
Posterior GP response (conditioned on training data)
Definition gp.h:33
method
Optimization method for GP hyperparameters.
Definition gp.h:22
@ LOO
Leave-One-Out cross-validation predictive probability optimization.
Definition gp.h:24
@ LOO_MSE
Leave-One-Out Mean Squared Error minimization.
Definition gp.h:25
@ MLE
Maximum Likelihood Estimation (maximizing marginal likelihood)
Definition gp.h:23
Functor wrapper for NLopt with automatic, transparent log-scaling.