42 using namespace Eigen;
56 void CFITCInferenceMethod::init()
95 SG_SERROR(
"Provided inference is not of type CFITCInferenceMethod!\n")
106 "FITC inference method can only use Gaussian likelihood function\n")
108 "of CRegressionLabels\n")
144 float64_t result=eigen_chol_utr.diagonal().array().log().sum()+
145 (-eigen_t.array().log().sum()+eigen_r.dot(eigen_r)-eigen_be.dot(eigen_be)+
177 eigen_chol_uu=Luu.matrixU();
184 V=eigen_chol_uu.triangularView<Upper>().adjoint().solve(eigen_ktru*
195 VectorXd::Ones(
m_t.
vlen)-(V.cwiseProduct(V)).colwise().sum().adjoint();
196 eigen_t=MatrixXd::Ones(eigen_t.rows(),1).cwiseQuotient(eigen_t);
200 LLT<MatrixXd> Lu(V*((VectorXd::Ones(
m_t.
vlen)).cwiseProduct(eigen_t)).asDiagonal()*
206 Map<MatrixXd> eigen_chol_utr(m_chol_utr.matrix, m_chol_utr.num_rows,
207 m_chol_utr.num_cols);
208 eigen_chol_utr=Lu.matrixU();
217 VectorXd sqrt_t=eigen_t.array().sqrt();
224 eigen_r=(eigen_y-eigen_m).cwiseProduct(sqrt_t);
230 eigen_be=eigen_chol_utr.triangularView<Upper>().adjoint().solve(
231 V*eigen_r.cwiseProduct(sqrt_t));
238 MatrixXd eigen_prod=eigen_chol_utr*eigen_chol_uu;
243 eigen_chol=eigen_prod.triangularView<Upper>().adjoint().solve(
245 eigen_chol=eigen_prod.triangularView<Upper>().solve(eigen_chol)-iKuu;
263 eigen_alpha=eigen_chol_utr.triangularView<Upper>().solve(eigen_be);
264 eigen_alpha=eigen_chol_uu.triangularView<Upper>().solve(eigen_alpha);
298 eigen_al=((eigen_y-eigen_m)-(V.adjoint()*
299 eigen_Lu.triangularView<Upper>().solve(eigen_be))).cwiseProduct(eigen_t);
302 MatrixXd iKuu=eigen_Luu.triangularView<Upper>().adjoint().solve(
304 iKuu=eigen_Luu.triangularView<Upper>().solve(iKuu);
317 eigen_w=eigen_B*eigen_al;
325 eigen_W=eigen_Lu.triangularView<Upper>().adjoint().solve(V*VectorXd::Ones(
326 m_t.
vlen).cwiseProduct(eigen_t).asDiagonal());
392 MatrixXd part1=eigen_V.adjoint()*(eigen_Lu.triangularView<Upper>().solve(MatrixXd::Identity(
394 eigen_Sigma=part1*part1.adjoint();
396 eigen_V.cwiseProduct(eigen_V)).colwise().sum().adjoint();
397 eigen_Sigma+=part2.asDiagonal();
406 REQUIRE(!strcmp(param->
m_name,
"log_sigma"),
"Can't compute derivative of "
407 "the nagative log marginal likelihood wrt %s.%s parameter\n",
427 eigen_t).sum()-eigen_W.cwiseProduct(eigen_W).sum()-eigen_al.dot(eigen_al));
virtual const char * get_name() const =0
virtual void update_alpha()
virtual void check_members() const
static void fill_vector(T *vec, int32_t len, T value)
virtual ELabelType get_label_type() const =0
virtual void update_parameter_hash()
Class that models Gaussian likelihood.
SGMatrix< float64_t > m_B
SGVector< float64_t > m_ktrtr_diag
Real Labels are real-valued labels.
SGVector< float64_t > m_alpha
The Inference Method base class.
virtual void update_chol()
virtual SGVector< float64_t > get_diagonal_vector()
The class Labels models labels, i.e. class assignments of objects.
SGMatrix< float64_t > m_chol_uu
real valued labels (e.g. for regression, classifier outputs)
SGMatrix< float64_t > m_Rvdd
virtual ~CFITCInferenceMethod()
SGVector< float64_t > m_al
SGMatrix< float64_t > m_kuu
virtual ELikelihoodModelType get_model_type() const
virtual int32_t get_num_vectors() const =0
virtual SGVector< float64_t > get_posterior_mean()
virtual SGVector< float64_t > get_mean_vector(const CFeatures *features) const =0
SGMatrix< float64_t > m_ktru
An abstract class of the mean function.
The Fully Independent Conditional Training inference base class for Laplace and regression for 1-D la...
SGVector< float64_t > m_mu
virtual void compute_gradient()
SGMatrix< float64_t > m_chol_utr
virtual float64_t get_negative_log_marginal_likelihood()
virtual void check_members() const
SGVector< float64_t > m_be
SGMatrix< float64_t > m_L
virtual void compute_gradient()
SGMatrix< float64_t > m_Sigma
static CGaussianLikelihood * obtain_from_generic(CLikelihoodModel *lik)
all of classes and functions are contained in the shogun namespace
The class Features is the base class of all feature objects.
The Fully Independent Conditional Training inference method class.
virtual SGVector< float64_t > get_derivative_wrt_likelihood_model(const TParameter *param)
static float64_t exp(float64_t x)
static float64_t log(float64_t v)
SGVector< float64_t > m_r
virtual void update_deriv()
SGVector< float64_t > m_t
virtual EInferenceType get_inference_type() const
float64_t m_log_ind_noise
SGVector< float64_t > m_w
SGMatrix< float64_t > m_V
virtual bool parameter_hash_changed()
The Likelihood model base class.
CLikelihoodModel * m_model
virtual SGMatrix< float64_t > get_posterior_covariance()
static CFITCInferenceMethod * obtain_from_generic(CInferenceMethod *inference)
static const float64_t PI