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")