40 using namespace Eigen;
54 void CFITCInferenceMethod::init()
93 SG_SERROR(
"Provided inference is not of type CFITCInferenceMethod!\n")
104 "FITC inference method can only use Gaussian likelihood function\n")
106 "of CRegressionLabels\n")
142 float64_t result=eigen_chol_utr.diagonal().array().log().sum()+
143 (-eigen_t.array().log().sum()+eigen_r.dot(eigen_r)-eigen_be.dot(eigen_be)+
175 eigen_chol_uu=Luu.matrixU();
182 V=eigen_chol_uu.triangularView<Upper>().adjoint().solve(eigen_ktru*
193 VectorXd::Ones(
m_t.
vlen)-(V.cwiseProduct(V)).colwise().sum().adjoint();
194 eigen_t=MatrixXd::Ones(eigen_t.rows(),1).cwiseQuotient(eigen_t);
198 LLT<MatrixXd> Lu(V*((VectorXd::Ones(
m_t.
vlen)).cwiseProduct(eigen_t)).asDiagonal()*
204 Map<MatrixXd> eigen_chol_utr(m_chol_utr.matrix, m_chol_utr.num_rows,
205 m_chol_utr.num_cols);
206 eigen_chol_utr=Lu.matrixU();
215 VectorXd sqrt_t=eigen_t.array().sqrt();
222 eigen_r=(eigen_y-eigen_m).cwiseProduct(sqrt_t);
228 eigen_be=eigen_chol_utr.triangularView<Upper>().adjoint().solve(
229 V*eigen_r.cwiseProduct(sqrt_t));
236 MatrixXd eigen_prod=eigen_chol_utr*eigen_chol_uu;
241 eigen_chol=eigen_prod.triangularView<Upper>().adjoint().solve(
243 eigen_chol=eigen_prod.triangularView<Upper>().solve(eigen_chol)-iKuu;
261 eigen_alpha=eigen_chol_utr.triangularView<Upper>().solve(eigen_be);
262 eigen_alpha=eigen_chol_uu.triangularView<Upper>().solve(eigen_alpha);
296 eigen_al=((eigen_y-eigen_m)-(V.adjoint()*
297 eigen_Lu.triangularView<Upper>().solve(eigen_be))).cwiseProduct(eigen_t);
300 MatrixXd iKuu=eigen_Luu.triangularView<Upper>().adjoint().solve(
302 iKuu=eigen_Luu.triangularView<Upper>().solve(iKuu);
315 eigen_w=eigen_B*eigen_al;
323 eigen_W=eigen_Lu.triangularView<Upper>().adjoint().solve(V*VectorXd::Ones(
324 m_t.
vlen).cwiseProduct(eigen_t).asDiagonal());
390 MatrixXd part1=eigen_V.adjoint()*(eigen_Lu.triangularView<Upper>().solve(MatrixXd::Identity(
392 eigen_Sigma=part1*part1.adjoint();
394 eigen_V.cwiseProduct(eigen_V)).colwise().sum().adjoint();
395 eigen_Sigma+=part2.asDiagonal();
404 REQUIRE(!strcmp(param->
m_name,
"log_sigma"),
"Can't compute derivative of "
405 "the nagative log marginal likelihood wrt %s.%s parameter\n",
425 eigen_t).sum()-eigen_W.cwiseProduct(eigen_W).sum()-eigen_al.dot(eigen_al));
432 SG_WARNING(
"The method does not require a minimizer. The provided minimizer will not be used.\n");
virtual const char * get_name() const =0
virtual void update_alpha()
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.
Real Labels are real-valued labels.
virtual void update_chol()
virtual SGVector< float64_t > get_diagonal_vector()
SGVector< float64_t > m_w
The class Labels models labels, i.e. class assignments of objects.
virtual EInferenceType get_inference_type() const
SGMatrix< float64_t > m_chol_uu
real valued labels (e.g. for regression, classifier outputs)
SGVector< float64_t > m_mu
virtual ~CFITCInferenceMethod()
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
An abstract class of the mean function.
virtual void compute_gradient()
virtual void check_members() const
SGMatrix< float64_t > m_chol_utr
virtual void register_minimizer(Minimizer *minimizer)
virtual float64_t get_negative_log_marginal_likelihood()
static CFITCInferenceMethod * obtain_from_generic(CInference *inference)
virtual void check_members() const
SGVector< float64_t > m_be
virtual void compute_gradient()
SGMatrix< float64_t > m_Sigma
SGMatrix< float64_t > m_Rvdd
SGMatrix< float64_t > m_kuu
SGMatrix< float64_t > m_L
SGVector< float64_t > m_ktrtr_diag
static CGaussianLikelihood * obtain_from_generic(CLikelihoodModel *lik)
SGVector< float64_t > m_t
all of classes and functions are contained in the shogun namespace
SGMatrix< float64_t > m_V
The Inference Method base class.
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()
SGMatrix< float64_t > m_ktru
The minimizer base class.
SGMatrix< float64_t > m_B
The Fully Independent Conditional Training inference base class for Laplace and regression for 1-D la...
CLikelihoodModel * m_model
virtual bool parameter_hash_changed()
The Likelihood model base class.
SGVector< float64_t > m_al
virtual SGMatrix< float64_t > get_posterior_covariance()
float64_t m_log_ind_noise
SGVector< float64_t > m_alpha
static const float64_t PI