50 using namespace Eigen;
60 set_inference_method(method);
63 void CGaussianProcessMachine::init()
78 REQUIRE(m_method,
"Inference method should not be NULL\n")
91 feat=m_method->get_features();
94 CKernel* training_kernel=m_method->get_kernel();
98 kernel->
init(feat, data);
105 eigen_Ks*=
CMath::sq(m_method->get_scale());
130 eigen_mu_matrix.block(bl,0,1,m)=(eigen_Ks.adjoint()*eigen_alpha.block(bl*n,0,n,1)+eigen_mean).transpose();
138 REQUIRE(m_method,
"Inference method should not be NULL\n")
142 bool is_sparse=
false;
153 feat=m_method->get_features();
158 CKernel* training_kernel=m_method->get_kernel();
161 kernel->
init(data, data);
168 eigen_Kss_diag*=
CMath::sq(m_method->get_scale());
171 kernel->
init(feat, data);
178 eigen_Ks*=
CMath::sq(m_method->get_scale());
197 if (eigen_L.isUpperTriangular() && !is_sparse)
206 MatrixXd eigen_V=eigen_L.triangularView<Upper>().adjoint().solve(
207 eigen_sW.asDiagonal()*eigen_Ks);
208 MatrixXd eigen_sV=eigen_V.cwiseProduct(eigen_V);
210 eigen_s2=eigen_Kss_diag-eigen_sV.colwise().sum().adjoint();
214 if (m_method->supports_multiclass())
224 for(
index_t bl_i=0; bl_i<C; bl_i++)
227 MatrixXd bi=eigen_E.block(0,bl_i*n,n,n)*eigen_Ks;
228 MatrixXd c_cav=eigen_M.triangularView<Upper>().adjoint().solve(bi);
229 c_cav=eigen_M.triangularView<Upper>().solve(c_cav);
231 for(
index_t bl_j=0; bl_j<C; bl_j++)
233 MatrixXd bj=eigen_E.block(0,bl_j*n,n,n)*eigen_Ks;
234 for (
index_t idx_m=0; idx_m<m; idx_m++)
235 eigen_s2[bl_j+(bl_i+idx_m*C)*C]=(bj.block(0,idx_m,n,1).array()*c_cav.block(0,idx_m,n,1).array()).sum();
237 for (
index_t idx_m=0; idx_m<m; idx_m++)
238 eigen_s2[bl_i+(bl_i+idx_m*C)*C]+=eigen_Kss_diag(idx_m)-(eigen_Ks.block(0,idx_m,n,1).array()*bi.block(0,idx_m,n,1).array()).sum();
243 SG_ERROR(
"Unsupported inference method!\n");
251 MatrixXd eigen_M=eigen_Ks.cwiseProduct(eigen_L*eigen_Ks);
252 eigen_s2=eigen_Kss_diag+eigen_M.colwise().sum().adjoint();
CGaussianProcessMachine()
virtual bool init(CFeatures *lhs, CFeatures *rhs)
The Inference Method base class.
virtual CSGObject * clone()
SGVector< float64_t > get_posterior_variances(CFeatures *data)
SGVector< float64_t > get_posterior_means(CFeatures *data)
virtual SGVector< float64_t > get_mean_vector(const CFeatures *features) const =0
An abstract class of the mean function.
SGMatrix< float64_t > get_kernel_matrix()
Class SGObject is the base class of all shogun objects.
The sparse inference base class for classification and regression for 1-D labels (1D regression and b...
static CKernel * obtain_from_generic(CSGObject *kernel)
all of classes and functions are contained in the shogun namespace
virtual CFeatures * get_inducing_features()
The class Features is the base class of all feature objects.
SGVector< float64_t > get_kernel_diagonal(SGVector< float64_t > preallocated=SGVector< float64_t >())
virtual ~CGaussianProcessMachine()
virtual void optimize_inducing_features()