49 using namespace Eigen;
66 void CKLApproxDiagonalInferenceMethod::init()
88 Map<VectorXd> eigen_result(result.
vector, len);
91 eigen_result=eigen_alpha;
113 eigen_s2=eigen_log_v.array().exp();
122 "The length of gradients (%d) should the same as the length of parameters (%d)\n",
142 Map<VectorXd> eigen_dnlz_alpha(gradient.
vector, len);
146 Map<VectorXd> eigen_dnlz_log_v(gradient.
vector+len, gradient.
vlen-len);
148 eigen_dnlz_log_v=(eigen_InvK.diagonal().array()-(1.0/eigen_s2.array()));
149 eigen_dnlz_log_v=(0.5*eigen_dnlz_log_v.array())-eigen_dv.array();
150 eigen_dnlz_log_v=eigen_dnlz_log_v.array()*eigen_s2.array();
168 float64_t trace=(eigen_s2.array()*eigen_InvK.diagonal().array()).sum();
171 float64_t result=-a+0.5*(-eigen_K.rows()+eigen_alpha.dot(eigen_mu-eigen_mean)+trace-log_det);
194 Map<VectorXd> eigen_s2(s2_tmp.
vector, s2_tmp.
vlen);
199 float64_t trace=eigen_InvK.diagonal().array().sum();
202 if (nlml_new<=nlml_def)
206 if (
m_alpha.
vlen != total_len || nlml_def<nlml_new)
224 eigen_Sigma=eigen_s2.asDiagonal();
SGVector< float64_t > m_alpha
virtual SGVector< float64_t > get_variational_first_derivative(const TParameter *param) const =0
virtual float64_t get_negative_log_marginal_likelihood_helper()
The class Labels models labels, i.e. class assignments of objects.
virtual int32_t get_num_labels() const =0
static T sum(T *vec, int32_t len)
return sum(vec)
The variational Gaussian Likelihood base class. The variational distribution is Gaussian.
TParameter * get_parameter(int32_t idx)
CKLApproxDiagonalInferenceMethod()
Eigen::MatrixXd solve_inverse(Eigen::MatrixXd A)
An abstract class of the mean function.
virtual SGVector< float64_t > get_alpha()
virtual void set_variational_distribution(SGVector< float64_t > mu, SGVector< float64_t > s2, const CLabels *lab)
virtual void get_gradient_of_nlml_wrt_parameters(SGVector< float64_t > gradient)
SGMatrix< float64_t > m_Sigma
The KL approximation inference method class.
virtual float64_t lbfgs_optimization()
virtual void update_alpha()
virtual SGVector< float64_t > get_variational_expection()=0
The class Features is the base class of all feature objects.
SGVector< float64_t > m_mu
SGVector< float64_t > m_s2
SGMatrix< float64_t > m_InvK_Sigma
virtual CVariationalGaussianLikelihood * get_variational_likelihood() const
virtual void lbfgs_precompute()
virtual void update_Sigma()
SGVector< float64_t > m_mean_vec
virtual bool parameter_hash_changed()
float64_t m_log_det_Kernel
The Likelihood model base class.
SGMatrix< float64_t > m_ktrtr
virtual ~CKLApproxDiagonalInferenceMethod()
virtual void update_InvK_Sigma()