13 #ifndef MLPACK_METHODS_GMM_GMM_HPP 14 #define MLPACK_METHODS_GMM_GMM_HPP 86 size_t dimensionality;
89 std::vector<distribution::GaussianDistribution> dists;
105 Log::Debug <<
"GMM::GMM(): no parameters given; Estimate() may fail " 106 <<
"unless parameters are set." << std::endl;
116 GMM(
const size_t gaussians,
const size_t dimensionality);
124 GMM(
const std::vector<distribution::GaussianDistribution> & dists,
125 const arma::vec& weights) :
126 gaussians(dists.
size()),
127 dimensionality((!dists.
empty()) ? dists[0].Mean().n_elem : 0),
157 const arma::vec&
Weights()
const {
return weights; }
167 double Probability(
const arma::vec& observation)
const;
175 void Probability(
const arma::mat& observation, arma::vec& probs)
const;
191 void LogProbability(
const arma::mat& observation, arma::vec& logProbs)
const;
201 const size_t component)
const;
211 const size_t component)
const;
243 template<
typename FittingType = EMFit<>>
244 double Train(
const arma::mat& observations,
245 const size_t trials = 1,
246 const bool useExistingModel =
false,
247 FittingType fitter = FittingType());
274 template<
typename FittingType = EMFit<>>
275 double Train(
const arma::mat& observations,
276 const arma::vec& probabilities,
277 const size_t trials = 1,
278 const bool useExistingModel =
false,
279 FittingType fitter = FittingType());
297 void Classify(
const arma::mat& observations,
298 arma::Row<size_t>& labels)
const;
303 template<
typename Archive>
304 void serialize(Archive& ar,
const uint32_t );
316 double LogLikelihood(
317 const arma::mat& dataPoints,
318 const std::vector<distribution::GaussianDistribution>& distsL,
319 const arma::vec& weights)
const;
326 #include "gmm_impl.hpp" GMM(const std::vector< distribution::GaussianDistribution > &dists, const arma::vec &weights)
Create a GMM with the given dists and weights.
constexpr bool empty(Container const &container) noexcept
A single multivariate Gaussian distribution.
void serialize(Archive &ar, const uint32_t)
Serialize the GMM.
arma::vec & Weights()
Return a reference to the a priori weights of each Gaussian.
constexpr auto size(Container const &container) noexcept -> decltype(container.size())
Linear algebra utility functions, generally performed on matrices or vectors.
GMM()
Create an empty Gaussian Mixture Model, with zero gaussians.
The core includes that mlpack expects; standard C++ includes, Armadillo, cereal, and a few basic mlpa...
const arma::vec & Weights() const
Return a const reference to the a priori weights of each Gaussian.
GMM & operator=(const GMM &other)
Copy operator for GMMs.
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.
double Probability(const arma::vec &observation) const
Return the probability that the given observation came from this distribution.
const distribution::GaussianDistribution & Component(size_t i) const
Return a const reference to a component distribution.
A Gaussian Mixture Model (GMM).
distribution::GaussianDistribution & Component(size_t i)
Return a reference to a component distribution.
arma::vec Random() const
Return a randomly generated observation according to the probability distribution defined by this obj...
double LogProbability(const arma::vec &observation) const
Return the log probability that the given observation came from this distribution.
static util::NullOutStream Debug
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...
size_t Dimensionality() const
Return the dimensionality of the model.
size_t Gaussians() const
Return the number of gaussians in the model.