19 using namespace shogun;
20 using namespace Eigen;
25 #ifndef DOXYGEN_SHOULD_SKIP_THIS
59 void set_sigma(
float64_t sigma) { m_sigma=sigma; }
123 class CProductFunction :
public CFunction
139 virtual ~CProductFunction()
153 return (*m_f)(x)*(*m_g)(x);
168 CLinearFunction() { }
170 virtual ~CLinearFunction() { }
185 class CQuadraticFunction :
public CFunction
189 CQuadraticFunction() { }
191 virtual ~CQuadraticFunction() { }
228 eigen_r=2.0*eigen_lp.array().exp()-1.0;
246 eigen_r=1-(2.0*eigen_lp.array().exp()-1.0).square();
255 REQUIRE(lab,
"Labels are required (lab should not be NULL)\n")
257 "Labels must be type of CBinaryLabels\n")
259 "length of the function vector\n")
262 Map<VectorXd> eigen_y(y.vector, y.vlen);
264 Map<VectorXd> eigen_f(func.
vector, func.
vlen);
270 eigen_r=-(1.0+(-eigen_y.array()*eigen_f.array()).exp()).log();
279 REQUIRE(lab,
"Labels are required (lab should not be NULL)\n")
281 "Labels must be type of CBinaryLabels\n")
283 "length of the function vector\n")
284 REQUIRE(i>=1 && i<=3,
"Index for derivative should be 1, 2 or 3\n")
289 Map<VectorXd> eigen_f(func.
vector, func.
vlen);
295 VectorXd eigen_s=(VectorXd::Ones(func.
vlen)).cwiseQuotient((1.0+
296 (-eigen_f).array().exp()).matrix());
302 eigen_r=(eigen_y.array()+1.0)/2.0-eigen_s.array();
307 eigen_r=-eigen_s.array()*(1.0-eigen_s.array());
312 eigen_r=-eigen_s.array()*(1.0-eigen_s.array())*(1.0-2.0*eigen_s.array());
316 SG_ERROR(
"Invalid index for derivative\n")
330 "Length of the vector of means (%d), length of the vector of "
331 "variances (%d) and number of labels (%d) should be the same\n",
334 "Labels must be type of CBinaryLabels\n")
341 "length of the vector of variances (%d) should be the same\n",
349 CNormalPDF* f=
new CNormalPDF();
352 CSigmoidFunction* g=
new CSigmoidFunction();
355 CProductFunction* h=
new CProductFunction(f, g);
386 REQUIRE(lab,
"Labels are required (lab should not be NULL)\n")
388 "Length of the vector of means (%d), length of the vector of "
389 "variances (%d) and number of labels (%d) should be the same\n",
391 REQUIRE(i>=0 && i<=mu.
vlen,
"Index (%d) out of bounds!\n", i)
393 "Labels must be type of CBinaryLabels\n")
398 CNormalPDF* f=
new CNormalPDF(mu[i],
CMath::sqrt(s2[i]));
401 CSigmoidFunction* g=
new CSigmoidFunction(y[i]);
404 CProductFunction* h=
new CProductFunction(f, g);
407 CLinearFunction* l=
new CLinearFunction();
410 CProductFunction* k=
new CProductFunction(l, h);
430 REQUIRE(lab,
"Labels are required (lab should not be NULL)\n")
432 "Length of the vector of means (%d), length of the vector of "
433 "variances (%d) and number of labels (%d) should be the same\n",
435 REQUIRE(i>=0 && i<=mu.
vlen,
"Index (%d) out of bounds!\n", i)
437 "Labels must be type of CBinaryLabels\n")
442 CNormalPDF* f=
new CNormalPDF(mu[i],
CMath::sqrt(s2[i]));
445 CSigmoidFunction* g=
new CSigmoidFunction(y[i]);
448 CProductFunction* h=
new CProductFunction(f, g);
451 CLinearFunction* l=
new CLinearFunction();
454 CProductFunction* k=
new CProductFunction(l, h);
458 CQuadraticFunction* q=
new CQuadraticFunction();
461 CProductFunction* p=
new CProductFunction(q, h);
virtual SGVector< float64_t > get_predictive_means(SGVector< float64_t > mu, SGVector< float64_t > s2, const CLabels *lab=NULL) const
virtual SGVector< float64_t > get_predictive_variances(SGVector< float64_t > mu, SGVector< float64_t > s2, const CLabels *lab=NULL) const
virtual ELabelType get_label_type() const =0
virtual ~CLogitLikelihood()
static float64_t integrate_quadgk(CFunction *f, float64_t a, float64_t b, float64_t abs_tol=1e-10, float64_t rel_tol=1e-5, uint32_t max_iter=1000, index_t sn=10)
The class Labels models labels, i.e. class assignments of objects.
static const float64_t INFTY
infinity
virtual int32_t get_num_labels() const =0
void log()
natural logarithm of vector elements
virtual float64_t get_second_moment(SGVector< float64_t > mu, SGVector< float64_t > s2, const CLabels *lab, index_t i) const
Class of a function of one variable.
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_log_zeroth_moments(SGVector< float64_t > mu, SGVector< float64_t > s2, const CLabels *lab) const
void set_const(T const_elem)
static float64_t exp(float64_t x)
virtual float64_t get_first_moment(SGVector< float64_t > mu, SGVector< float64_t > s2, const CLabels *lab, index_t i) const
Binary Labels for binary classification.
virtual SGVector< float64_t > get_log_probability_f(const CLabels *lab, SGVector< float64_t > func) const
static float32_t sqrt(float32_t x)
x^0.5
The Likelihood model base class.
static const float64_t PI