CluE  1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pointgmm.h
Go to the documentation of this file.
1 #ifndef CLUEPOINTGMM_H
2 #define CLUEPOINTGMM_H
3 
4 #include "../exception/invalidruntimeconfigurationexception.h"
5 #include "../distribution/distribution.h"
6 #include "../point/pointgauss.h"
7 //#include "../learning/gmmprovider.h"
8 #include "../point/point.h"
9 #include "../point/matrix.h"
10 
11 #include <random>
12 
13 namespace CluE
14 {
15 
21 class PointGMM : public Distribution<Point>
22 {
23 public:
24 
25  PointGMM(std::vector<double> const&, std::vector<PointGauss> const&);
26 
27 // PointGMM(GMMProvider const&);
28 
32  virtual double density(Point const& x) const;
33 
37  virtual double nll(Point const& x) const;
38 
39  virtual double minNLL(Point const& x) const;
40 
41  virtual double minSquaredMahalanobis(Point const& x) const;
42 
43  template<typename RndEngine> Point draw(RndEngine&) const;
44 
45 private:
46  std::vector<double> weights;
47  std::vector<PointGauss> gaussians;
48 };
49 
50 template<typename RndEngine>
51 Point PointGMM::draw(RndEngine& re) const
52 {
53  size_t k = this->weights.size();
54  if (k==0)
55  throw InvalidRuntimeConfigurationException(0, "There are no gaussians in this mixture!");
56 
57  std::uniform_real_distribution<> urd(0, 1);
58  double r = urd(re);
59 
60  size_t i = 0;
61  while (r>this->weights[i])
62  {
63  ++i;
64  r-=this->weights[i];
65  }
66  if (i>=k)
67  i=k-1;
68 
69  return this->gaussians[i].draw(re);
70 }
71 
72 }
73 
74 #endif
virtual double density(Point const &x) const
Evaluates the density of the GMM distribution at the given point x.
Definition: pointgmm.cpp:24
virtual double nll(Point const &x) const
Computes the negative log-likelihood of the density at the given point x.
Definition: pointgmm.cpp:34
PointGMM(std::vector< double > const &, std::vector< PointGauss > const &)
Definition: pointgmm.cpp:9
std::vector< double > weights
Definition: pointgmm.h:46
Point draw(RndEngine &) const
Definition: pointgmm.h:51
virtual double minNLL(Point const &x) const
Definition: pointgmm.cpp:39
Weighted point of arbitrary dimension.
Definition: point.h:17
Gaussian Mixture Model distribution.
Definition: pointgmm.h:21
Abstract base class for probability distributions.
Definition: distribution.h:16
std::vector< PointGauss > gaussians
Definition: pointgmm.h:47
Indicates that a computation entered an invalid configuration state.
virtual double minSquaredMahalanobis(Point const &x) const
Definition: pointgmm.cpp:59