13 #ifndef MLPACK_METHODS_GMM_DIAGONAL_GMM_IMPL_HPP 14 #define MLPACK_METHODS_GMM_DIAGONAL_GMM_IMPL_HPP 23 template<
typename FittingType>
26 const bool useExistingModel,
29 double bestLikelihood;
37 fitter.Estimate(observations, dists, weights, useExistingModel);
38 bestLikelihood = LogLikelihood(observations, dists, weights);
47 std::vector<distribution::DiagonalGaussianDistribution> distsOrig;
48 arma::vec weightsOrig;
52 weightsOrig = weights;
58 fitter.Estimate(observations, dists, weights, useExistingModel);
59 bestLikelihood = LogLikelihood(observations, dists, weights);
61 Log::Info <<
"DiagonalGMM::Train(): Log-likelihood of trial 0 is " 62 << bestLikelihood <<
"." << std::endl;
65 std::vector<distribution::DiagonalGaussianDistribution> distsTrial(
67 arma::vec weightsTrial(gaussians);
69 for (
size_t trial = 1; trial < trials; ++trial)
73 distsTrial = distsOrig;
74 weightsTrial = weightsOrig;
77 fitter.Estimate(observations, distsTrial, weightsTrial,
81 double newLikelihood = LogLikelihood(observations, distsTrial,
84 Log::Info <<
"DiagonalGMM::Train(): Log-likelihood of trial " << trial
85 <<
" is " << newLikelihood <<
"." << std::endl;
87 if (newLikelihood > bestLikelihood)
90 bestLikelihood = newLikelihood;
93 weights = weightsTrial;
99 Log::Info <<
"DiagonalGMM::Train(): log-likelihood of trained GMM is " 100 << bestLikelihood <<
"." << std::endl;
101 return bestLikelihood;
108 template<
typename FittingType>
110 const arma::vec& probabilities,
112 const bool useExistingModel,
115 double bestLikelihood;
123 fitter.Estimate(observations, probabilities, dists, weights,
126 bestLikelihood = LogLikelihood(observations, dists, weights);
134 std::vector<distribution::DiagonalGaussianDistribution> distsOrig;
135 arma::vec weightsOrig;
136 if (useExistingModel)
139 weightsOrig = weights;
144 fitter.Estimate(observations, probabilities, dists, weights,
147 bestLikelihood = LogLikelihood(observations, dists, weights);
149 Log::Debug <<
"DiagonalGMM::Train(): Log-likelihood of trial 0 is " 150 << bestLikelihood <<
"." << std::endl;
153 std::vector<distribution::DiagonalGaussianDistribution> distsTrial(
155 arma::vec weightsTrial(gaussians);
157 for (
size_t trial = 1; trial < trials; ++trial)
159 if (useExistingModel)
161 distsTrial = distsOrig;
162 weightsTrial = weightsOrig;
165 fitter.Estimate(observations, probabilities, distsTrial, weightsTrial,
169 double newLikelihood = LogLikelihood(observations, distsTrial,
172 Log::Debug <<
"DiagonalGMM::Train(): Log-likelihood of trial " << trial
173 <<
" is " << newLikelihood <<
"." << std::endl;
175 if (newLikelihood > bestLikelihood)
178 bestLikelihood = newLikelihood;
181 weights = weightsTrial;
187 Log::Info <<
"DiagonalGMM::Train(): log-likelihood of trained GMM is " 188 << bestLikelihood <<
"." << std::endl;
189 return bestLikelihood;
193 template<
typename Archive>
196 ar(CEREAL_NVP(gaussians));
197 ar(CEREAL_NVP(dimensionality));
198 ar(CEREAL_NVP(dists));
199 ar(CEREAL_NVP(weights));
205 #endif // MLPACK_METHODS_GMM_DIAGONAL_GMM_IMPL_HPP 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
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
void serialize(Archive &ar, const uint32_t)
Serialize the DiagonalGMM.
Definition: diagonal_gmm_impl.hpp:194
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...
Definition: diagonal_gmm_impl.hpp:24
static MLPACK_EXPORT util::PrefixedOutStream Info
Prints informational messages if –verbose is specified, prefixed with [INFO ].
Definition: log.hpp:84
A single multivariate Gaussian distribution with diagonal covariance.
Definition: diagonal_gaussian_distribution.hpp:21