48 using namespace Eigen;
62 void CSparseVGInferenceMethod::init()
121 SG_SERROR(
"Provided inference is not of type CSparseVGInferenceMethod!\n")
132 "SparseVG inference method can only use Gaussian likelihood function\n")
134 "of CRegressionLabels\n")
155 0.5*
m_yy/(
m_sigma2)-eigen_inv_La.diagonal().array().log().sum();
166 return neg_f012+neg_f3+neg_trk;
201 eigen_C=eigen_Knm_inv_Lm.transpose()*eigen_Knm_inv_Lm;
215 eigen_L=eigen_inv_Lm*(
217 )*eigen_inv_Lm.transpose();
221 -eigen_C.diagonal().array().sum());
237 VectorXd y_cor=eigen_y-eigen_m;
238 VectorXd eigen_y_Knm_inv_Lm_inv_La_transpose=eigen_inv_La.transpose()*(
239 eigen_Knm_inv_Lm.transpose()*y_cor);
243 eigen_alpha=eigen_inv_Lm*eigen_inv_La*eigen_y_Knm_inv_Lm_inv_La_transpose;
245 m_yy=y_cor.dot(y_cor);
247 m_f3=0.5*eigen_y_Knm_inv_Lm_inv_La_transpose.dot(eigen_y_Knm_inv_Lm_inv_La_transpose)/
m_sigma2;
277 MatrixXd Tmm=-eigen_L-eigen_alpha*eigen_alpha.transpose();
283 eigen_Tmm = Tmm - (eigen_inv_Lm*eigen_C*eigen_inv_Lm.transpose()/
m_sigma2);
291 eigen_Tnm += (eigen_y-eigen_m)*eigen_alpha.transpose();
311 REQUIRE(!strcmp(param->
m_name,
"log_sigma"),
"Can't compute derivative of "
312 "the nagative log marginal likelihood wrt %s.%s parameter\n",
323 float64_t sigma2aux=
m_sigma2*eigen_inv_La.cwiseProduct(eigen_inv_La).array().sum()+
351 for(int32_t lat_idx=0; lat_idx<eigen_Tnm.cols(); lat_idx++)
363 for(int32_t lat_lidx=0; lat_lidx<eigen_Tmm.cols(); lat_lidx++)
380 REQUIRE(param,
"Param not set\n");
381 REQUIRE(!strcmp(param->
m_name,
"log_inducing_noise"),
"Can't compute derivative of "
382 "the nagative log marginal likelihood wrt %s.%s parameter\n",
403 float64_t dkern= -0.5*eigen_dKuui.cwiseProduct(eigen_Tmm).sum()
404 -eigen_dKui.cwiseProduct(eigen_Tnm.transpose()).sum()/
m_sigma2
405 +0.5*eigen_ddiagKi.array().sum()/
m_sigma2;
412 REQUIRE(param,
"Param not set\n");
414 int64_t len=
const_cast<TParameter *
>(param)->m_datatype.get_num_elements();
432 *eigen_alpha+(eigen_m-eigen_y))/
m_sigma2;
virtual const char * get_name() const =0
virtual bool init(CFeatures *lhs, CFeatures *rhs)
virtual void check_members() const
virtual const char * get_name() const
virtual ELabelType get_label_type() const =0
virtual void update_parameter_hash()
Class that models Gaussian likelihood.
SGVector< float64_t > m_ktrtr_diag
Real Labels are real-valued labels.
SGVector< float64_t > m_alpha
The Inference Method base class.
virtual SGVector< float64_t > get_derivative_wrt_mean(const TParameter *param)
virtual ~CSparseVGInferenceMethod()
The class Labels models labels, i.e. class assignments of objects.
real valued labels (e.g. for regression, classifier outputs)
SGMatrix< float64_t > m_kuu
virtual ELikelihoodModelType get_model_type() const
virtual SGVector< float64_t > get_posterior_mean()
#define SG_NOTIMPLEMENTED
virtual SGVector< float64_t > get_mean_vector(const CFeatures *features) const =0
SGMatrix< float64_t > m_ktru
An abstract class of the mean function.
SGMatrix< float64_t > m_inducing_features
SGMatrix< float64_t > m_inv_Lm
virtual void update_deriv()
SGMatrix< float64_t > m_Tmm
static CSparseVGInferenceMethod * obtain_from_generic(CInferenceMethod *inference)
SGMatrix< float64_t > m_Tnm
SGMatrix< float64_t > m_L
virtual SGMatrix< float64_t > get_posterior_covariance()
virtual float64_t get_negative_log_marginal_likelihood()
virtual void compute_gradient()
virtual void update_chol()
virtual void compute_gradient()
CSparseVGInferenceMethod()
virtual float64_t get_derivative_related_cov(SGVector< float64_t > ddiagKi, SGMatrix< float64_t > dKuui, SGMatrix< float64_t > dKui)
static CGaussianLikelihood * obtain_from_generic(CLikelihoodModel *lik)
The sparse inference base class for classification and regression for 1-D labels (1D regression and b...
virtual void check_members() const
SGMatrix< float64_t > m_inv_La
virtual SGVector< float64_t > get_parameter_derivative(const CFeatures *features, const TParameter *param, index_t index=-1)
all of classes and functions are contained in the shogun namespace
virtual void update_alpha()
virtual CFeatures * get_inducing_features()
The class Features is the base class of all feature objects.
SGMatrix< float64_t > m_Knm_inv_Lm
virtual SGVector< float64_t > get_derivative_wrt_likelihood_model(const TParameter *param)
static float64_t exp(float64_t x)
virtual SGMatrix< float64_t > get_parameter_gradient(const TParameter *param, index_t index=-1)
static float64_t log(float64_t v)
virtual EInferenceType get_inference_type() const
virtual SGVector< float64_t > get_diagonal_vector()
float64_t m_log_ind_noise
The inference method class based on the Titsias' variational bound. For more details, see Titsias, Michalis K. "Variational learning of inducing variables in sparse Gaussian processes." International Conference on Artificial Intelligence and Statistics. 2009.
virtual bool parameter_hash_changed()
The Likelihood model base class.
CLikelihoodModel * m_model
virtual SGVector< float64_t > get_derivative_wrt_inducing_noise(const TParameter *param)
virtual SGVector< float64_t > get_derivative_wrt_inducing_features(const TParameter *param)
static const float64_t PI