20 using namespace shogun;
21 using namespace Eigen;
30 REQUIRE(sigma>0.0,
"Standard deviation must be greater than zero\n")
35 void CGaussianLikelihood::init()
51 SG_SERROR(
"Provided likelihood is not of type CGaussianLikelihood!\n")
67 Map<VectorXd> eigen_result(result.
vector, result.
vlen);
69 eigen_result=eigen_result.array()+
CMath::sq(m_sigma);
78 REQUIRE(lab,
"Labels are required (lab should not be NULL)\n")
80 "Labels must be type of CRegressionLabels\n")
82 "length of the function vector\n")
87 Map<VectorXd> eigen_result(result.
vector, result.
vlen);
93 eigen_result=eigen_y-eigen_f;
94 eigen_result=-eigen_result.cwiseProduct(eigen_result)/(2.0*
CMath::sq(m_sigma))-
104 REQUIRE(lab,
"Labels are required (lab should not be NULL)\n")
106 "Labels must be type of CRegressionLabels\n")
108 "length of the function vector\n")
109 REQUIRE(i>=1 && i<=3,
"Index for derivative should be 1, 2 or 3\n")
111 Map<VectorXd> eigen_f(func.
vector, func.
vlen);
114 Map<VectorXd> eigen_result(result.
vector, result.
vlen);
120 eigen_result=eigen_y-eigen_f;
126 eigen_result=-VectorXd::Ones(result.
vlen)/
CMath::sq(m_sigma);
128 eigen_result=VectorXd::Zero(result.
vlen);
136 REQUIRE(lab,
"Labels are required (lab should not be NULL)\n")
138 "Labels must be type of CRegressionLabels\n")
140 "length of the function vector\n")
142 Map<VectorXd> eigen_f(func.
vector, func.
vlen);
145 Map<VectorXd> eigen_result(result.
vector, result.
vlen);
147 if (strcmp(param->
m_name,
"sigma"))
156 eigen_result=eigen_y-eigen_f;
157 eigen_result=eigen_result.cwiseProduct(eigen_result)/
CMath::sq(m_sigma);
158 eigen_result-=VectorXd::Ones(result.
vlen);
166 REQUIRE(lab,
"Labels are required (lab should not be NULL)\n")
168 "Labels must be type of CRegressionLabels\n")
170 "length of the function vector\n")
172 if (strcmp(param->
m_name,
"sigma"))
175 Map<VectorXd> eigen_f(func.
vector, func.
vlen);
178 Map<VectorXd> eigen_result(result.
vector, result.
vlen);
186 eigen_result=2.0*(eigen_f-eigen_y)/
CMath::sq(m_sigma);
194 REQUIRE(lab,
"Labels are required (lab should not be NULL)\n")
196 "Labels must be type of CRegressionLabels\n")
198 "length of the function vector\n")
200 if (strcmp(param->
m_name,
"sigma"))
203 Map<VectorXd> eigen_f(func.
vector, func.
vlen);
206 Map<VectorXd> eigen_result(result.
vector, result.
vlen);
211 eigen_result=2.0*VectorXd::Ones(result.
vlen)/
CMath::sq(m_sigma);
224 "Length of the vector of means (%d), length of the vector of "
225 "variances (%d) and number of labels (%d) should be the same\n",
228 "Labels must be type of CRegressionLabels\n")
235 "length of the vector of variances (%d) should be the same\n",
248 Map<VectorXd> eigen_result(result.
vector, result.
vlen);
251 eigen_s2=eigen_s2.array()+
CMath::sq(m_sigma);
252 eigen_result=-(eigen_y-eigen_mu).array().square()/(2.0*eigen_s2.array())-
253 (2.0*
CMath::PI*eigen_s2.array()).log()/2.0;
262 REQUIRE(lab,
"Labels are required (lab should not be NULL)\n")
264 "Length of the vector of means (%d), length of the vector of "
265 "variances (%d) and number of labels (%d) should be the same\n",
267 REQUIRE(i>=0 && i<=mu.
vlen,
"Index (%d) out of bounds!\n", i)
269 "Labels must be type of CRegressionLabels\n")
283 REQUIRE(lab,
"Labels are required (lab should not be NULL)\n")
285 "Length of the vector of means (%d), length of the vector of "
286 "variances (%d) and number of labels (%d) should be the same\n",
288 REQUIRE(i>=0 && i<=mu.
vlen,
"Index (%d) out of bounds!\n", i)
290 "Labels must be type of CRegressionLabels\n")
virtual ELabelType get_label_type() const =0
Class that models Gaussian likelihood.
Real Labels are real-valued labels.
virtual SGVector< float64_t > get_log_probability_f(const CLabels *lab, SGVector< float64_t > func) const
The class Labels models labels, i.e. class assignments of objects.
virtual int32_t get_num_labels() const =0
real valued labels (e.g. for regression, classifier outputs)
virtual ELikelihoodModelType get_model_type() const
virtual float64_t get_second_moment(SGVector< float64_t > mu, SGVector< float64_t > s2, const CLabels *lab, index_t i) const
virtual ~CGaussianLikelihood()
virtual SGVector< float64_t > get_first_derivative(const CLabels *lab, SGVector< float64_t > func, const TParameter *param) const
virtual SGVector< float64_t > get_predictive_variances(SGVector< float64_t > mu, SGVector< float64_t > s2, const CLabels *lab=NULL) const
virtual SGVector< float64_t > get_predictive_means(SGVector< float64_t > mu, SGVector< float64_t > s2, const CLabels *lab=NULL) const
virtual float64_t get_first_moment(SGVector< float64_t > mu, SGVector< float64_t > s2, const CLabels *lab, index_t i) const
void set_const(T const_elem)
static CGaussianLikelihood * obtain_from_generic(CLikelihoodModel *lik)
virtual SGVector< float64_t > get_second_derivative(const CLabels *lab, SGVector< float64_t > func, const TParameter *param) const
virtual SGVector< float64_t > get_log_zeroth_moments(SGVector< float64_t > mu, SGVector< float64_t > s2, const CLabels *lab) const
virtual SGVector< float64_t > get_log_probability_derivative_f(const CLabels *lab, SGVector< float64_t > func, index_t i) const
virtual SGVector< float64_t > get_third_derivative(const CLabels *lab, SGVector< float64_t > func, const TParameter *param) const
The Likelihood model base class.
static const float64_t PI