mlpack  master
gmm.hpp
Go to the documentation of this file.
1 
14 #ifndef MLPACK_METHODS_MOG_MOG_EM_HPP
15 #define MLPACK_METHODS_MOG_MOG_EM_HPP
16 
17 #include <mlpack/prereqs.hpp>
18 
19 // This is the default fitting method class.
20 #include "em_fit.hpp"
21 
22 namespace mlpack {
23 namespace gmm {
24 
79 class GMM
80 {
81  private:
83  size_t gaussians;
86 
88  std::vector<distribution::GaussianDistribution> dists;
89 
91  arma::vec weights;
92 
93  public:
97  GMM() :
98  gaussians(0),
99  dimensionality(0)
100  {
101  // Warn the user. They probably don't want to do this. If this constructor
102  // is being used (because it is required by some template classes), the user
103  // should know that it is potentially dangerous.
104  Log::Debug << "GMM::GMM(): no parameters given; Estimate() may fail "
105  << "unless parameters are set." << std::endl;
106  }
107 
115  GMM(const size_t gaussians, const size_t dimensionality);
116 
123  GMM(const std::vector<distribution::GaussianDistribution> & dists,
124  const arma::vec& weights) :
125  gaussians(dists.size()),
126  dimensionality((!dists.empty()) ? dists[0].Mean().n_elem : 0),
127  dists(dists),
128  weights(weights) { /* Nothing to do. */ }
129 
131  GMM(const GMM& other);
132 
134  GMM& operator=(const GMM& other);
135 
137  size_t Gaussians() const { return gaussians; }
139  size_t Dimensionality() const { return dimensionality; }
140 
147  return dists[i]; }
153  distribution::GaussianDistribution& Component(size_t i) { return dists[i]; }
154 
156  const arma::vec& Weights() const { return weights; }
158  arma::vec& Weights() { return weights; }
159 
166  double Probability(const arma::vec& observation) const;
167 
175  double Probability(const arma::vec& observation,
176  const size_t component) const;
177 
184  arma::vec Random() const;
185 
208  template<typename FittingType = EMFit<>>
209  double Train(const arma::mat& observations,
210  const size_t trials = 1,
211  const bool useExistingModel = false,
212  FittingType fitter = FittingType());
213 
238  template<typename FittingType = EMFit<>>
239  double Train(const arma::mat& observations,
240  const arma::vec& probabilities,
241  const size_t trials = 1,
242  const bool useExistingModel = false,
243  FittingType fitter = FittingType());
244 
261  void Classify(const arma::mat& observations,
262  arma::Row<size_t>& labels) const;
263 
267  template<typename Archive>
268  void Serialize(Archive& ar, const unsigned int /* version */);
269 
270  private:
280  double LogLikelihood(
281  const arma::mat& dataPoints,
282  const std::vector<distribution::GaussianDistribution>& distsL,
283  const arma::vec& weights) const;
284 };
285 
286 } // namespace gmm
287 } // namespace mlpack
288 
289 // Include implementation.
290 #include "gmm_impl.hpp"
291 
292 #endif
293 
arma::vec Random() const
Return a randomly generated observation according to the probability distribution defined by this obj...
A single multivariate Gaussian distribution.
void Classify(const arma::mat &observations, arma::Row< size_t > &labels) const
Classify the given observations as being from an individual component in this GMM.
GMM(const std::vector< distribution::GaussianDistribution > &dists, const arma::vec &weights)
Create a GMM with the given dists and weights.
Definition: gmm.hpp:123
double LogLikelihood(const arma::mat &dataPoints, const std::vector< distribution::GaussianDistribution > &distsL, const arma::vec &weights) const
This function computes the loglikelihood of the given model.
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: binarize.hpp:18
const arma::vec & Weights() const
Return a const reference to the a priori weights of each Gaussian.
Definition: gmm.hpp:156
const distribution::GaussianDistribution & Component(size_t i) const
Return a const reference to a component distribution.
Definition: gmm.hpp:146
The core includes that mlpack expects; standard C++ includes and Armadillo.
std::vector< distribution::GaussianDistribution > dists
Vector of Gaussians.
Definition: gmm.hpp:88
size_t gaussians
The number of Gaussians in the model.
Definition: gmm.hpp:83
size_t Dimensionality() const
Return the dimensionality of the model.
Definition: gmm.hpp:139
GMM & operator=(const GMM &other)
Copy operator for GMMs.
A Gaussian Mixture Model (GMM).
Definition: gmm.hpp:79
static MLPACK_EXPORT util::NullOutStream Debug
MLPACK_EXPORT is required for global variables, so that they are properly exported by the Windows com...
Definition: log.hpp:79
arma::vec weights
Vector of a priori weights for each Gaussian.
Definition: gmm.hpp:91
double Train(const arma::mat &observations, const size_t trials=1, const bool useExistingModel=false, FittingType fitter=FittingType())
Estimate the probability distribution directly from the given observations, using the given algorithm...
double Probability(const arma::vec &observation) const
Return the probability that the given observation came from this distribution.
void Serialize(Archive &ar, const unsigned int)
Serialize the GMM.
arma::vec & Weights()
Return a reference to the a priori weights of each Gaussian.
Definition: gmm.hpp:158
size_t dimensionality
The dimensionality of the model.
Definition: gmm.hpp:85
distribution::GaussianDistribution & Component(size_t i)
Return a reference to a component distribution.
Definition: gmm.hpp:153
size_t Gaussians() const
Return the number of gaussians in the model.
Definition: gmm.hpp:137
GMM()
Create an empty Gaussian Mixture Model, with zero gaussians.
Definition: gmm.hpp:97