Learning Curve Plus Plus (LCPP)
gp.h
Go to the documentation of this file.
1 /**
2  * @file gp.h
3  * @author Ozgur Taylan Turan
4  *
5  * Gaussian Process Regression
6  *
7  */
8 
9 #ifndef GP_H
10 #define GP_H
11 
12 
13 namespace algo {
14 namespace regression {
15 
16 //-----------------------------------------------------------------------------
17 // Gaussian Process Regression
18 //-----------------------------------------------------------------------------
19 template<class K=mlpack::GaussianKernel,class T=DTYPE>
21 {
22  public:
23 
24  /**
25  * Non-working model
26  * @param args : kernel parameters
27  */
28  template<typename... Ts>
29  GaussianProcess ( const Ts&... args ) : cov_(args...), lambda_(0.0) { };
30 
31  /**
32  * @param X : inputs
33  * @param y : labels
34  * @param args : kernel parameters
35  */
36  template<typename... Ts>
37  GaussianProcess ( const arma::Mat<T>& inputs,
38  const arma::Row<T>& labels,
39  const T lambda,
40  const Ts&... args );
41  /**
42  * @param X : inputs
43  * @param y : labels
44  */
45  GaussianProcess ( const arma::Mat<T>& inputs,
46  const arma::Row<T>& labels );
47 
48  /**
49  * @param X : inputs
50  * @param y : labels
51  */
52  void Train ( const arma::Mat<T>& inputs,
53  const arma::Row<T>& labels );
54 
55  /**
56  * @param X* : inputs*
57  * @param y* : labels*
58  */
59  void Predict ( const arma::Mat<T>& inputs,
60  arma::Row<T>& labels ) const;
61 
62  /**
63  * @param X* : inputs*
64  * @param y* : labels*
65  */
66  void PredictVariance ( const arma::Mat<T>& inputs,
67  arma::Mat<T>& labels );
68 
69  /**
70  * Calculate the L2 squared error on the given predictors and responses using
71  * this linear regression model. This calculation returns
72  *
73  * @param X* : points*
74  * @param y* : responses*
75  */
76  T ComputeError ( const arma::Mat<T>& inputs,
77  const arma::Row<T>& labels ) const;
78  /**
79  * Calculate the Log Likelihood of the model given data
80  *
81  * @param X* : points*
82  * @param y* : responses*
83  */
84  T LogLikelihood ( const arma::Mat<T>& inputs,
85  const arma::Row<T>& labels ) const;
86  /**
87  * Sample functions from the prior
88  *
89  * @param X : inputs
90  * @param y : labels
91  */
92  void SamplePrior ( const size_t k,
93  const arma::Mat<T>& inputs,
94  arma::Mat<T>& labels ) const;
95 
96  /**
97  * Sample functions from the prior
98  *
99  * @param X : inputs
100  * @param y : labels
101  */
102  void SamplePosterior ( const size_t k,
103  const arma::Mat<T>& inputs,
104  arma::Mat<T>& labels );
105  /**
106  * Get Parameters
107  *
108  */
109  const arma::Col<T>& Parameters ( ) const { return parameters_; }
110 
111  arma::Col<T>& Parameters ( ) { return parameters_; }
112 
113  /**
114  * Set Lambda
115  *
116  * @param lambda : lambda
117  */
118  void Lambda( const T& lambda ) { lambda_ = lambda; }
119 
120  /**
121  * Serialize the model.
122  */
123  template<typename Archive>
124  void serialize ( Archive& ar, const unsigned int /* version */ )
125  {
126  ar ( cereal::make_nvp("parameters",parameters_),
127  cereal::make_nvp("train_inp",train_inp_),
128  cereal::make_nvp("lambda",lambda_),
129  cereal::make_nvp("cov",cov_),
130  cereal::make_nvp("N",N_),
131  cereal::make_nvp("L",L_) );
132  }
133 
134  private:
135  arma::Mat<T> L_;
136 
137  arma::Mat<T> train_inp_; // for later usage
138  size_t N_; // for later usage
139  arma::Col<T> parameters_;
140  data::Gram<K,T> cov_;
141  T lambda_;
142 };
143 
144 
145 
146 } // namespace regression
147 } // namespace algo
148 
149 #include "gp_impl.h"
150 
151 #endif
152 
T LogLikelihood(const arma::Mat< T > &inputs, const arma::Row< T > &labels) const
Definition: gp_impl.h:86
const arma::Col< T > & Parameters() const
Definition: gp.h:109
void PredictVariance(const arma::Mat< T > &inputs, arma::Mat< T > &labels)
Definition: gp_impl.h:61
GaussianProcess(const Ts &... args)
Definition: gp.h:29
T ComputeError(const arma::Mat< T > &inputs, const arma::Row< T > &labels) const
Definition: gp_impl.h:71
void serialize(Archive &ar, const unsigned int)
Definition: gp.h:124
void Train(const arma::Mat< T > &inputs, const arma::Row< T > &labels)
Definition: gp_impl.h:37
void Lambda(const T &lambda)
Definition: gp.h:118
void SamplePosterior(const size_t k, const arma::Mat< T > &inputs, arma::Mat< T > &labels)
Definition: gp_impl.h:94
void Predict(const arma::Mat< T > &inputs, arma::Row< T > &labels) const
Definition: gp_impl.h:53
void SamplePrior(const size_t k, const arma::Mat< T > &inputs, arma::Mat< T > &labels) const
Definition: gp_impl.h:107