12 namespace regression {
17 template<
class K,
class T>
20 const arma::Row<T>& labels,
23 cov_(args...), lambda_(lambda)
25 Train(inputs, labels);
28 template<
class K,
class T>
30 const arma::Row<T>& labels) :
33 Train(inputs, labels);
36 template<
class K,
class T>
38 const arma::Row<T>& labels )
43 arma::Mat<T> k_xx = cov_.GetMatrix(train_inp_,train_inp_);
45 arma::Mat<T> KLambda = k_xx+
46 (lambda_ + 1.e-6) * arma::eye<arma::Mat<T>>(k_xx.n_rows, k_xx.n_rows);
48 L_ = arma::chol(KLambda,
"lower");
49 parameters_ = arma::solve(L_.t(), arma::solve(L_,labels.t()));
52 template<
class K,
class T>
54 arma::Row<T>& labels )
const
56 arma::Mat<T> k_xpx = cov_.GetMatrix(inputs,train_inp_);
57 labels = (k_xpx * parameters_).t();
60 template<
class K,
class T>
62 arma::Mat<T>& labels )
64 arma::Mat<T> k_xpx = cov_.GetMatrix(inputs,train_inp_);
65 arma::Mat<T> k_xpxp = cov_.GetMatrix(inputs,inputs);
66 arma::Mat<T> v = arma::solve(L_,k_xpx.t());
67 labels = arma::conv_to<arma::Mat<T>>::from((k_xpxp - v.t()*v));
70 template<
class K,
class T>
72 const arma::Row<T>& labels )
const
75 Predict(inputs, temp);
76 const size_t n_points = inputs.n_cols;
80 const T cost = arma::dot(temp, temp) / n_points;
85 template<
class K,
class T>
87 const arma::Row<T>& labels )
const
89 return -0.5*arma::dot(labels,parameters_) - arma::trace(arma::log(L_))
90 - 0.5*T(N_)*std::log(2.*M_PI);
93 template<
class K,
class T>
95 const arma::Mat<T>& inputs,
96 arma::Mat<T>& labels )
100 Predict(inputs, mean);
101 PredictVariance(inputs, cov);
103 labels = arma::mvnrnd(mean.t(), cov, M).t();
106 template<
class K,
class T>
108 const arma::Mat<T>& inputs,
109 arma::Mat<T>& labels )
const
111 size_t N = inputs.n_cols;
112 arma::Mat<T> cov = cov_.GetMatrix(inputs,inputs);
113 cov.diag() += 1e-6 + lambda_;
114 arma::Col<T> mean(N);
115 labels = arma::mvnrnd(mean, cov, M).t();
T LogLikelihood(const arma::Mat< T > &inputs, const arma::Row< T > &labels) const
void PredictVariance(const arma::Mat< T > &inputs, arma::Mat< T > &labels)
GaussianProcess(const Ts &... args)
T ComputeError(const arma::Mat< T > &inputs, const arma::Row< T > &labels) const
void Train(const arma::Mat< T > &inputs, const arma::Row< T > &labels)
void SamplePosterior(const size_t k, const arma::Mat< T > &inputs, arma::Mat< T > &labels)
void Predict(const arma::Mat< T > &inputs, arma::Row< T > &labels) const
void SamplePrior(const size_t k, const arma::Mat< T > &inputs, arma::Mat< T > &labels) const