From 701185301e38df8d2c41810d253eee030362bd33 Mon Sep 17 00:00:00 2001 From: KimSangYeon-DGU Date: Sun, 3 Mar 2019 02:28:40 +0900 Subject: [PATCH] Change DiagCovGaussianDistribution to DiagonalGaussianDistribution --- HISTORY.md | 2 +- src/mlpack/core.hpp | 2 +- src/mlpack/core/dists/CMakeLists.txt | 4 +- ...cpp => diagonal_gaussian_distribution.cpp} | 24 ++++----- ...hpp => diagonal_gaussian_distribution.hpp} | 18 +++---- src/mlpack/methods/gmm/diagonal_gmm.cpp | 5 +- src/mlpack/methods/gmm/diagonal_gmm.hpp | 36 ++++++------- src/mlpack/methods/gmm/diagonal_gmm_impl.hpp | 20 ++++---- src/mlpack/tests/distribution_test.cpp | 50 +++++++++---------- src/mlpack/tests/gmm_test.cpp | 32 +++++++----- src/mlpack/tests/hmm_test.cpp | 48 +++++++++--------- .../tests/main_tests/hmm_generate_test.cpp | 8 +-- .../tests/main_tests/hmm_viterbi_test.cpp | 8 +-- 13 files changed, 133 insertions(+), 124 deletions(-) rename src/mlpack/core/dists/{diag_cov_gaussian_distribution.cpp => diagonal_gaussian_distribution.cpp} (83%) rename src/mlpack/core/dists/{diag_cov_gaussian_distribution.hpp => diagonal_gaussian_distribution.hpp} (91%) diff --git a/HISTORY.md b/HISTORY.md index b930d433be..14401c5cb2 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,6 @@ ### mlpack 3.1.0 ###### ????-??-?? - * Add DiagCovGaussianDistribution and DiagonalGMM classes to speed up the + * Add DiagonalGaussianDistribution and DiagonalGMM classes to speed up the diagonal covariance computation and deprecate DiagonalConstraint (#1666). * Add kernel density estimation (KDE) implementation with bindings to other diff --git a/src/mlpack/core.hpp b/src/mlpack/core.hpp index 0a8132ebc4..595a73406f 100644 --- a/src/mlpack/core.hpp +++ b/src/mlpack/core.hpp @@ -281,7 +281,7 @@ #include #include #include -#include +#include // mlpack::backtrace only for linux #ifdef HAS_BFD_DL diff --git a/src/mlpack/core/dists/CMakeLists.txt b/src/mlpack/core/dists/CMakeLists.txt index f8a2bba50b..c8365faac3 100644 --- a/src/mlpack/core/dists/CMakeLists.txt +++ b/src/mlpack/core/dists/CMakeLists.txt @@ -11,8 +11,8 @@ set(SOURCES regression_distribution.cpp gamma_distribution.hpp gamma_distribution.cpp - diag_cov_gaussian_distribution.hpp - diag_cov_gaussian_distribution.cpp + diagonal_gaussian_distribution.hpp + diagonal_gaussian_distribution.cpp ) # add directory name to sources diff --git a/src/mlpack/core/dists/diag_cov_gaussian_distribution.cpp b/src/mlpack/core/dists/diagonal_gaussian_distribution.cpp similarity index 83% rename from src/mlpack/core/dists/diag_cov_gaussian_distribution.cpp rename to src/mlpack/core/dists/diagonal_gaussian_distribution.cpp index 3764581008..ee17ee3ca0 100644 --- a/src/mlpack/core/dists/diag_cov_gaussian_distribution.cpp +++ b/src/mlpack/core/dists/diagonal_gaussian_distribution.cpp @@ -1,5 +1,5 @@ /** - * @file diag_cov_gaussian_distribution.cpp + * @file diagonal_gaussian_distribution.cpp * @author Kim SangYeon * * Implementation of Gaussian distribution class with diagonal covariance. @@ -9,13 +9,13 @@ * 3-clause BSD license along with mlpack. If not, see * http://www.opensource.org/licenses/BSD-3-Clause for more information. */ -#include "diag_cov_gaussian_distribution.hpp" +#include "diagonal_gaussian_distribution.hpp" #include using namespace mlpack; using namespace mlpack::distribution; -DiagCovGaussianDistribution::DiagCovGaussianDistribution( +DiagonalGaussianDistribution::DiagonalGaussianDistribution( const arma::vec& mean, const arma::vec& covariance) : mean(mean) @@ -23,21 +23,21 @@ DiagCovGaussianDistribution::DiagCovGaussianDistribution( Covariance(covariance); } -void DiagCovGaussianDistribution::Covariance(const arma::vec& covariance) +void DiagonalGaussianDistribution::Covariance(const arma::vec& covariance) { this->covariance = covariance; InvertCovariance(); LogDeterminant(); } -void DiagCovGaussianDistribution::Covariance(arma::vec&& covariance) +void DiagonalGaussianDistribution::Covariance(arma::vec&& covariance) { this->covariance = std::move(covariance); InvertCovariance(); LogDeterminant(); } -double DiagCovGaussianDistribution::LogProbability( +double DiagonalGaussianDistribution::LogProbability( const arma::vec& observation) const { const size_t k = observation.n_elem; @@ -46,24 +46,24 @@ double DiagCovGaussianDistribution::LogProbability( return -0.5 * k * log2pi - 0.5 * logDetCov - 0.5 * logExponent(0); } -void DiagCovGaussianDistribution::InvertCovariance() +void DiagonalGaussianDistribution::InvertCovariance() { // Calculate the inverse of the diagonal covariance. invCov = 1/covariance; } -void DiagCovGaussianDistribution::LogDeterminant() +void DiagonalGaussianDistribution::LogDeterminant() { // Calculate Log determinant of the diagonal covariance. logDetCov = arma::accu(log(covariance)); } -arma::vec DiagCovGaussianDistribution::Random() const +arma::vec DiagonalGaussianDistribution::Random() const { return (arma::sqrt(covariance) % arma::randn(mean.n_elem)) + mean; } -void DiagCovGaussianDistribution::Train(const arma::mat& observations) +void DiagonalGaussianDistribution::Train(const arma::mat& observations) { if (observations.n_cols > 1) { @@ -95,8 +95,8 @@ void DiagCovGaussianDistribution::Train(const arma::mat& observations) LogDeterminant(); } -void DiagCovGaussianDistribution::Train(const arma::mat& observations, - const arma::vec& probabilities) +void DiagonalGaussianDistribution::Train(const arma::mat& observations, + const arma::vec& probabilities) { if (observations.n_cols > 0) { diff --git a/src/mlpack/core/dists/diag_cov_gaussian_distribution.hpp b/src/mlpack/core/dists/diagonal_gaussian_distribution.hpp similarity index 91% rename from src/mlpack/core/dists/diag_cov_gaussian_distribution.hpp rename to src/mlpack/core/dists/diagonal_gaussian_distribution.hpp index 7af97c2bec..0c6a7071ad 100644 --- a/src/mlpack/core/dists/diag_cov_gaussian_distribution.hpp +++ b/src/mlpack/core/dists/diagonal_gaussian_distribution.hpp @@ -1,5 +1,5 @@ /** - * @file diag_cov_gaussian_distribution.hpp + * @file diagonal_gaussian_distribution.hpp * @author Kim SangYeon * * Implementation of the Gaussian distribution with diagonal covariance. @@ -9,8 +9,8 @@ * 3-clause BSD license along with mlpack. If not, see * http://www.opensource.org/licenses/BSD-3-Clause for more information. */ -#ifndef MLPACK_CORE_DISTRIBUTIONS_DIAG_COV_GAUSSIAN_DISTRIBUTION_HPP -#define MLPACK_CORE_DISTRIBUTIONS_DIAG_COV_GAUSSIAN_DISTRIBUTION_HPP +#ifndef MLPACK_CORE_DISTRIBUTIONS_DIAGONAL_GAUSSIAN_DISTRIBUTION_HPP +#define MLPACK_CORE_DISTRIBUTIONS_DIAGONAL_GAUSSIAN_DISTRIBUTION_HPP #include @@ -18,7 +18,7 @@ namespace mlpack { namespace distribution { //! A single multivariate Gaussian distribution with diagonal covariance. -class DiagCovGaussianDistribution +class DiagonalGaussianDistribution { private: //! Mean of the distribution. @@ -41,13 +41,13 @@ class DiagCovGaussianDistribution public: //! Default constructor, which creates a Gaussian with zero dimension. - DiagCovGaussianDistribution() : logDetCov(0.0) { /* nothing to do. */ } + DiagonalGaussianDistribution() : logDetCov(0.0) { /* nothing to do. */ } /** * Create a Gaussian Distribution with zero mean and diagonal covariance * with the given dimensionality. */ - DiagCovGaussianDistribution(const size_t dimension) : + DiagonalGaussianDistribution(const size_t dimension) : mean(arma::zeros(dimension)), covariance(arma::ones(dimension)), invCov(arma::ones(dimension)), @@ -58,8 +58,8 @@ class DiagCovGaussianDistribution * Create a Guassian distribution with the given mean and diagonal * covariance. */ - DiagCovGaussianDistribution(const arma::vec& mean, - const arma::vec& covariance); + DiagonalGaussianDistribution(const arma::vec& mean, + const arma::vec& covariance); //! Return the dimensionalty of this distribution. size_t Dimensionality() const { return mean.n_elem; } @@ -157,7 +157,7 @@ class DiagCovGaussianDistribution * @param observations Matrix of observations. * @param probabilities Output log probabilities for each input observation. */ -inline void DiagCovGaussianDistribution::LogProbability( +inline void DiagonalGaussianDistribution::LogProbability( const arma::mat& observations, arma::vec& logProbabilities) const { diff --git a/src/mlpack/methods/gmm/diagonal_gmm.cpp b/src/mlpack/methods/gmm/diagonal_gmm.cpp index 27e3ea417c..baab514625 100644 --- a/src/mlpack/methods/gmm/diagonal_gmm.cpp +++ b/src/mlpack/methods/gmm/diagonal_gmm.cpp @@ -26,7 +26,8 @@ namespace gmm { DiagonalGMM::DiagonalGMM(const size_t gaussians, const size_t dimensionality) : gaussians(gaussians), dimensionality(dimensionality), - dists(gaussians, distribution::DiagCovGaussianDistribution(dimensionality)), + dists(gaussians, + distribution::DiagonalGaussianDistribution(dimensionality)), weights(gaussians) { // Set equal weights. Technically this model is still valid, but only barely. @@ -154,7 +155,7 @@ void DiagonalGMM::Classify(const arma::mat& observations, */ double DiagonalGMM::LogLikelihood( const arma::mat& observations, - const std::vector& dists, + const std::vector& dists, const arma::vec& weights) const { double logLikelihood = 0; diff --git a/src/mlpack/methods/gmm/diagonal_gmm.hpp b/src/mlpack/methods/gmm/diagonal_gmm.hpp index e0f158dc65..fa17be7f78 100644 --- a/src/mlpack/methods/gmm/diagonal_gmm.hpp +++ b/src/mlpack/methods/gmm/diagonal_gmm.hpp @@ -15,7 +15,7 @@ #define MLPACK_METHODS_GMM_DIAGONAL_GMM_HPP #include -#include +#include // This is the default fitting method class. #include "em_fit.hpp" @@ -37,14 +37,16 @@ namespace gmm /** Gaussian Mixture Models. */ { * It must provide the following two functions: * * @code - * void Estimate(const arma::mat& observations, - * std::vector& dists, - * arma::vec& weights); + * void Estimate( + * const arma::mat& observations, + * std::vector& dists, + * arma::vec& weights); * - * void Estimate(const arma::mat& observations, - * const arma::vec& probabilities, - * std::vector& dists, - * arma::vec& weights); + * void Estimate( + * const arma::mat& observations, + * const arma::vec& probabilities, + * std::vector& dists, + * arma::vec& weights); * @endcode * * Example use: @@ -75,7 +77,7 @@ class DiagonalGMM size_t dimensionality; //! Vector of Gaussians - std::vector dists; + std::vector dists; //! Vector of a priori weights for each Gaussian. arma::vec weights; @@ -110,7 +112,7 @@ class DiagonalGMM * @param dists Distributions of the model. * @param weights Weights of the model. */ - DiagonalGMM(const std::vector& + DiagonalGMM(const std::vector& dists, const arma::vec& weights) : gaussians(dists.size()), dimensionality((!dists.empty()) ? dists[0].Mean().n_elem : 0), @@ -133,14 +135,14 @@ class DiagonalGMM * * @param i index of component. */ - const distribution::DiagCovGaussianDistribution& Component(size_t i) const { + const distribution::DiagonalGaussianDistribution& Component(size_t i) const { return dists[i]; } /** * Return a reference to a component distribution. * * @param i index of component. */ - distribution::DiagCovGaussianDistribution& Component(size_t i) { + distribution::DiagonalGaussianDistribution& Component(size_t i) { return dists[i]; } //! Return a const reference to the a priori weights of each Gaussian. @@ -291,7 +293,7 @@ class DiagonalGMM */ template> void Estimate(const arma::mat& observations, - std::vector& dists, + std::vector& dists, arma::vec& weights, const bool useInitialModel = false, const size_t maxIterations = 300, @@ -321,7 +323,7 @@ class DiagonalGMM template> void Estimate(const arma::mat& observations, const arma::vec& probabilities, - std::vector& dists, + std::vector& dists, arma::vec& weights, const bool useInitialModel = false, const size_t maxIterations = 300, @@ -346,7 +348,7 @@ class DiagonalGMM */ double LogLikelihood( const arma::mat& observations, - const std::vector& dists, + const std::vector& dists, const arma::vec& weights) const; /** @@ -362,7 +364,7 @@ class DiagonalGMM template> void InitialClustering( const arma::mat& observations, - std::vector& dists, + std::vector& dists, arma::vec& weights, InitialClusteringType clusterer = InitialClusteringType()); @@ -385,7 +387,7 @@ class DiagonalGMM template> void ArmadilloGMMWrapper( const arma::mat& observations, - std::vector& dists, + std::vector& dists, arma::vec& weights, const bool useInitialModel = false, const size_t maxIterations = 300, diff --git a/src/mlpack/methods/gmm/diagonal_gmm_impl.hpp b/src/mlpack/methods/gmm/diagonal_gmm_impl.hpp index ce9905bbf0..00f30364fe 100644 --- a/src/mlpack/methods/gmm/diagonal_gmm_impl.hpp +++ b/src/mlpack/methods/gmm/diagonal_gmm_impl.hpp @@ -47,7 +47,7 @@ double DiagonalGMM::Train(const arma::mat& observations, // If each trial must start from the same initial location, // we must save it. - std::vector distsOrig; + std::vector distsOrig; arma::vec weightsOrig; if (useExistingModel) { @@ -66,8 +66,8 @@ double DiagonalGMM::Train(const arma::mat& observations, << bestLikelihood << "." << std::endl; // Now the temporary model. - std::vector distsTrial(gaussians, - distribution::DiagCovGaussianDistribution(dimensionality)); + std::vector distsTrial( + gaussians, distribution::DiagonalGaussianDistribution(dimensionality)); arma::vec weightsTrial(gaussians); for (size_t trial = 1; trial < trials; ++trial) @@ -137,7 +137,7 @@ double DiagonalGMM::Train(const arma::mat& observations, return -DBL_MAX; // It's what they asked for... // If each trial must start from the same initial location, we must save it. - std::vector distsOrig; + std::vector distsOrig; arma::vec weightsOrig; if (useExistingModel) { @@ -156,8 +156,8 @@ double DiagonalGMM::Train(const arma::mat& observations, << bestLikelihood << "." << std::endl; // Now the temporary model. - std::vector distsTrial(gaussians, - distribution::DiagCovGaussianDistribution(dimensionality)); + std::vector distsTrial( + gaussians, distribution::DiagonalGaussianDistribution(dimensionality)); arma::vec weightsTrial(gaussians); for (size_t trial = 1; trial < trials; ++trial) @@ -198,7 +198,7 @@ double DiagonalGMM::Train(const arma::mat& observations, template void DiagonalGMM::Estimate( const arma::mat& observations, - std::vector& dists, + std::vector& dists, arma::vec& weights, const bool useInitialModel, const size_t maxIterations, @@ -291,7 +291,7 @@ void DiagonalGMM::Estimate( template void DiagonalGMM::Estimate(const arma::mat& observations, const arma::vec& probabilities, - std::vector& dists, + std::vector& dists, arma::vec& weights, const bool useInitialModel, const size_t maxIterations, @@ -382,7 +382,7 @@ void DiagonalGMM::Estimate(const arma::mat& observations, template void DiagonalGMM::InitialClustering( const arma::mat& observations, - std::vector& dists, + std::vector& dists, arma::vec& weights, InitialClusteringType clusterer) { @@ -451,7 +451,7 @@ void DiagonalGMM::InitialClustering( template void DiagonalGMM::ArmadilloGMMWrapper( const arma::mat& observations, - std::vector& dists, + std::vector& dists, arma::vec& weights, const bool useInitialModel, const size_t maxIterations, diff --git a/src/mlpack/tests/distribution_test.cpp b/src/mlpack/tests/distribution_test.cpp index 46f2ed1b8b..69a3210f9c 100644 --- a/src/mlpack/tests/distribution_test.cpp +++ b/src/mlpack/tests/distribution_test.cpp @@ -1149,9 +1149,9 @@ BOOST_AUTO_TEST_CASE(RegressionDistributionTest) * Make sure Diagonal Covariance Gaussian distributions are initialized * correctly. */ -BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionEmptyConstructor) +BOOST_AUTO_TEST_CASE(DiagonalGaussianDistributionEmptyConstructor) { - DiagCovGaussianDistribution d; + DiagonalGaussianDistribution d; BOOST_REQUIRE_EQUAL(d.Mean().n_elem, 0); BOOST_REQUIRE_EQUAL(d.Covariance().n_elem, 0); @@ -1161,9 +1161,9 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionEmptyConstructor) * Make sure Diagonal Covariance Gaussian distributions are initialized to * the correct dimensionality. */ -BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionDimensionalityConstructor) +BOOST_AUTO_TEST_CASE(DiagonalGaussianDistributionDimensionalityConstructor) { - DiagCovGaussianDistribution d(4); + DiagonalGaussianDistribution d(4); BOOST_REQUIRE_EQUAL(d.Mean().n_elem, 4); BOOST_REQUIRE_EQUAL(d.Covariance().n_elem, 4); @@ -1173,12 +1173,12 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionDimensionalityConstructor) * Make sure Diagonal Covariance Gaussian distributions are initialized * correctly when we give a mean and covariance. */ -BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionConstructor) +BOOST_AUTO_TEST_CASE(DiagonalGaussianDistributionConstructor) { arma::vec mean = arma::randu(3); arma::vec covariance = arma::randu(3); - DiagCovGaussianDistribution d(mean, covariance); + DiagonalGaussianDistribution d(mean, covariance); // Make sure the mean and covariance is correct. for (size_t i = 0; i < 3; i++) @@ -1192,12 +1192,12 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionConstructor) * Make sure the probability of observations is correct. * The values were calculated using 'dmvnorm' in R. */ -BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionProbabilityTest) +BOOST_AUTO_TEST_CASE(DiagonalGaussianDistributionProbabilityTest) { arma::vec mean("2 5 3 4 1"); arma::vec cov("3 1 5 3 2"); - DiagCovGaussianDistribution d(mean, cov); + DiagonalGaussianDistribution d(mean, cov); // Observations lists randomly selected. BOOST_REQUIRE_CLOSE(d.LogProbability("3 5 2 7 8"), -20.861264167855161, @@ -1213,12 +1213,12 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionProbabilityTest) } /** - * Test DiagCovGaussianDistribution::Probability() in the univariate case. + * Test DiagonalGaussianDistribution::Probability() in the univariate case. * The values were calculated using 'dmvnorm' in R. */ -BOOST_AUTO_TEST_CASE(DiagCovGaussianUnivariateProbabilityTest) +BOOST_AUTO_TEST_CASE(DiagonalGaussianUnivariateProbabilityTest) { - DiagCovGaussianDistribution d(arma::vec("0.0"), arma::vec("1.0")); + DiagonalGaussianDistribution d(arma::vec("0.0"), arma::vec("1.0")); // Mean: 0.0, Covariance: 1.0 BOOST_REQUIRE_CLOSE(d.Probability("0.0"), 0.3989422804014327, 1e-5); @@ -1246,16 +1246,16 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianUnivariateProbabilityTest) } /** - * Test DiagCovGaussianDistribution::Probability() in the multivariate case. + * Test DiagonalGaussianDistribution::Probability() in the multivariate case. * The values were calculated using 'dmvnorm' in R. */ -BOOST_AUTO_TEST_CASE(DiagCovGaussianMultivariateProbabilityTest) +BOOST_AUTO_TEST_CASE(DiagonalGaussianMultivariateProbabilityTest) { arma::vec mean("0 0"); arma::vec cov("2 2"); arma::vec obs("0 0"); - DiagCovGaussianDistribution d(mean, cov); + DiagonalGaussianDistribution d(mean, cov); BOOST_REQUIRE_CLOSE(d.Probability(obs), 0.079577471545947673, 1e-5); @@ -1277,7 +1277,7 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianMultivariateProbabilityTest) * Test the phi() function, for multiple points in the multivariate Gaussian * case. The values were calculated using 'dmvnorm' in R. */ -BOOST_AUTO_TEST_CASE(DiagCovGaussianMultipointMultivariateProbabilityTest) +BOOST_AUTO_TEST_CASE(DiagonalGaussianMultipointMultivariateProbabilityTest) { arma::vec mean = "2 5 3 7 2"; arma::vec cov("9 2 1 4 8"); @@ -1287,7 +1287,7 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianMultipointMultivariateProbabilityTest) "6 8 4 7 9 2;" "4 6 7 7 3 2"; arma::vec phis; - DiagCovGaussianDistribution d(mean, cov); + DiagonalGaussianDistribution d(mean, cov); d.LogProbability(points, phis); BOOST_REQUIRE_EQUAL(phis.n_elem, 6); @@ -1303,12 +1303,12 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianMultipointMultivariateProbabilityTest) /** * Make sure random observations follow the probability distribution correctly. */ -BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionRandomTest) +BOOST_AUTO_TEST_CASE(DiagonalGaussianDistributionRandomTest) { arma::vec mean("2.5 1.25"); arma::vec cov("0.50 0.25"); - DiagCovGaussianDistribution d(mean, cov); + DiagonalGaussianDistribution d(mean, cov); arma::mat obs(2, 5000); @@ -1330,7 +1330,7 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionRandomTest) /** * Make sure that we can properly estimate from given observations. */ -BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionTrainTest) +BOOST_AUTO_TEST_CASE(DiagonalGaussianDistributionTrainTest) { arma::vec mean("2.5 1.5 8.2 3.1"); arma::vec cov("1.2 3.1 8.3 4.3"); @@ -1341,7 +1341,7 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionTrainTest) for (size_t i = 0; i < 10000; i++) observations.col(i) = (arma::sqrt(cov) % arma::randn(4)) + mean; - DiagCovGaussianDistribution d; + DiagonalGaussianDistribution d; // Calculate the actual mean and covariance of data using armadillo. arma::vec actualMean = arma::mean(observations, 1); @@ -1362,7 +1362,7 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianDistributionTrainTest) * Make sure the unbiased estimator of the weighted sample works correctly. * The values were calculated using 'cov.wt' in R. */ -BOOST_AUTO_TEST_CASE(DiagCovGaussianUnbiasedEstimatorTest) +BOOST_AUTO_TEST_CASE(DiagonalGaussianUnbiasedEstimatorTest) { // Generate the observations. arma::mat observations("3 5 2 7;" @@ -1372,7 +1372,7 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianUnbiasedEstimatorTest) arma::vec probs("0.3 0.4 0.1 0.2"); - DiagCovGaussianDistribution d; + DiagonalGaussianDistribution d; // Estimate d.Train(observations, probs); @@ -1393,7 +1393,7 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianUnbiasedEstimatorTest) * the weighted mean and covariance reduce to the unweighted sample mean and * covariance. */ -BOOST_AUTO_TEST_CASE(DiagCovGaussianWeightedParametersReductionTest) +BOOST_AUTO_TEST_CASE(DiagonalGaussianWeightedParametersReductionTest) { arma::vec mean("2.5 1.5 8.2 3.1"); arma::vec cov("1.2 3.1 8.3 4.3"); @@ -1405,8 +1405,8 @@ BOOST_AUTO_TEST_CASE(DiagCovGaussianWeightedParametersReductionTest) for (size_t i = 0; i < 5; i++) obs.col(i) = (arma::sqrt(cov) % arma::randn(4)) + mean; - DiagCovGaussianDistribution d1; - DiagCovGaussianDistribution d2; + DiagonalGaussianDistribution d1; + DiagonalGaussianDistribution d2; // Estimate d1.Train(obs); diff --git a/src/mlpack/tests/gmm_test.cpp b/src/mlpack/tests/gmm_test.cpp index d98f4fda73..a64ad5e80e 100644 --- a/src/mlpack/tests/gmm_test.cpp +++ b/src/mlpack/tests/gmm_test.cpp @@ -804,8 +804,8 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMProbabilityTest) { // Create DiagonalGMM. DiagonalGMM gmm(2, 2); - gmm.Component(0) = distribution::DiagCovGaussianDistribution("0 0", "1 1"); - gmm.Component(1) = distribution::DiagCovGaussianDistribution("2 3", "3 2"); + gmm.Component(0) = distribution::DiagonalGaussianDistribution("0 0", "1 1"); + gmm.Component(1) = distribution::DiagonalGaussianDistribution("2 3", "3 2"); gmm.Weights() = "0.2 0.8"; // The values are calculated using mlpack's GMM class. @@ -824,8 +824,8 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMProbabilityComponentTest) { // Create DiagonalGMM. DiagonalGMM gmm(2, 2); - gmm.Component(0) = distribution::DiagCovGaussianDistribution("0 0", "1 1"); - gmm.Component(1) = distribution::DiagCovGaussianDistribution("2 3", "3 2"); + gmm.Component(0) = distribution::DiagonalGaussianDistribution("0 0", "1 1"); + gmm.Component(1) = distribution::DiagonalGaussianDistribution("2 3", "3 2"); gmm.Weights() = "0.2 0.8"; // The values are calculated using mlpack's GMM class. @@ -894,7 +894,7 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMTrainEMOneGaussian) BOOST_AUTO_TEST_CASE(DiagonalGMMTrainEMOneGaussianWithProbability) { // Generate a diagonal covariance gaussian distribution. - distribution::DiagCovGaussianDistribution d("1.0 0.8", "1.0 2.0"); + distribution::DiagonalGaussianDistribution d("1.0 0.8", "1.0 2.0"); // Generate 20000 observations, each with random probabilities. arma::mat observations(2, 20000); @@ -932,9 +932,12 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMTrainEMMultipleGaussians) { // We'll have three diagonal covariance Gaussian distributions from this // mixture. - distribution::DiagCovGaussianDistribution d1("0.0 1.0 0.0", "1.0 0.8 1.0;"); - distribution::DiagCovGaussianDistribution d2("2.0 -1.0 5.0", "3.0 1.2 1.3;"); - distribution::DiagCovGaussianDistribution d3("0.0 5.0 -3.0", "2.0 0.3 1.0;"); + distribution::DiagonalGaussianDistribution d1("0.0 1.0 0.0", + "1.0 0.8 1.0;"); + distribution::DiagonalGaussianDistribution d2("2.0 -1.0 5.0", + "3.0 1.2 1.3;"); + distribution::DiagonalGaussianDistribution d3("0.0 5.0 -3.0", + "2.0 0.3 1.0;"); // Now we'll generate points and probabilities. arma::mat observations(3, 5000); @@ -1009,9 +1012,12 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMTrainEMMultipleGaussiansWithProbability) { // We'll have three diagonal covariance Gaussian distributions from this // mixture. - distribution::DiagCovGaussianDistribution d1("-1.5 0.8 1.0", "1.0 0.8 1.0;"); - distribution::DiagCovGaussianDistribution d2("2.0 -1.0 5.0", "3.0 1.2 1.3;"); - distribution::DiagCovGaussianDistribution d3("1.4 5.0 -3.0", "2.0 2.3 1.0;"); + distribution::DiagonalGaussianDistribution d1("-1.5 0.8 1.0", + "1.0 0.8 1.0;"); + distribution::DiagonalGaussianDistribution d2("2.0 -1.0 5.0", + "3.0 1.2 1.3;"); + distribution::DiagonalGaussianDistribution d3("1.4 5.0 -3.0", + "2.0 2.3 1.0;"); // Now we'll generate observations and probabilities. arma::mat observations(3, 10000); @@ -1091,10 +1097,10 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMRandomTest) DiagonalGMM gmm(2, 2); gmm.Weights() = arma::vec("0.40 0.60"); - gmm.Component(0) = distribution::DiagCovGaussianDistribution("1.05 2.60", + gmm.Component(0) = distribution::DiagonalGaussianDistribution("1.05 2.60", "0.95 1.01"); - gmm.Component(1) = distribution::DiagCovGaussianDistribution("4.30 1.00", + gmm.Component(1) = distribution::DiagonalGaussianDistribution("4.30 1.00", "1.05 0.97"); // Now generate a bunch of observations. diff --git a/src/mlpack/tests/hmm_test.cpp b/src/mlpack/tests/hmm_test.cpp index 5411da2faa..9a7cff6050 100644 --- a/src/mlpack/tests/hmm_test.cpp +++ b/src/mlpack/tests/hmm_test.cpp @@ -1243,18 +1243,18 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMHMMPredictTest) std::vector gmms(2); gmms[0] = DiagonalGMM(2, 2); - gmms[0].Component(0) = DiagCovGaussianDistribution("3.25 2.10", + gmms[0].Component(0) = DiagonalGaussianDistribution("3.25 2.10", "0.97 1.00"); - gmms[0].Component(1) = DiagCovGaussianDistribution("5.03 7.28", + gmms[0].Component(1) = DiagonalGaussianDistribution("5.03 7.28", "1.20 0.89"); gmms[1] = DiagonalGMM(3, 2); gmms[1].Weights() = arma::vec("0.3 0.2 0.5"); - gmms[1].Component(0) = DiagCovGaussianDistribution("-2.48 -3.02", + gmms[1].Component(0) = DiagonalGaussianDistribution("-2.48 -3.02", "1.02 0.80"); - gmms[1].Component(0) = DiagCovGaussianDistribution("-1.24 -2.40", + gmms[1].Component(0) = DiagonalGaussianDistribution("-1.24 -2.40", "0.85 0.78"); - gmms[1].Component(0) = DiagCovGaussianDistribution("-5.68 -4.83", + gmms[1].Component(0) = DiagonalGaussianDistribution("-5.68 -4.83", "1.42 0.96"); // Initial probabilities. @@ -1314,14 +1314,14 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMHMMPredictTest) BOOST_AUTO_TEST_CASE(DiagonalGMMHMMGenerateTest) { // Build the model. - HMM hmm(3, DiagCovGaussianDistribution(2)); + HMM hmm(3, DiagonalGaussianDistribution(2)); hmm.Transition() = arma::mat("0.2 0.3 0.8;" "0.4 0.5 0.1;" "0.4 0.2 0.1"); - hmm.Emission()[0] = DiagCovGaussianDistribution("0.0 0.0", "1.0 0.7"); - hmm.Emission()[1] = DiagCovGaussianDistribution("1.0 1.0", "0.7 0.5"); - hmm.Emission()[2] = DiagCovGaussianDistribution("-3.0 2.0", "2.0 0.3"); + hmm.Emission()[0] = DiagonalGaussianDistribution("0.0 0.0", "1.0 0.7"); + hmm.Emission()[1] = DiagonalGaussianDistribution("1.0 1.0", "0.7 0.5"); + hmm.Emission()[2] = DiagonalGaussianDistribution("-3.0 2.0", "2.0 0.3"); // Now we will generate a long sequence. std::vector observations(1); @@ -1331,7 +1331,7 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMHMMGenerateTest) hmm.Generate(10000, observations[0], states[0], 1); // Build the hmm2. - HMM hmm2(3, DiagCovGaussianDistribution(2)); + HMM hmm2(3, DiagonalGaussianDistribution(2)); // Now estimate the HMM from the generated sequence. hmm2.Train(observations, states); @@ -1356,7 +1356,7 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMHMMGenerateTest) BOOST_AUTO_TEST_CASE(DiagonalGMMHMMOneGaussianOneStateTrainingTest) { // Create a gaussian distribution with diagonal covariance. - DiagCovGaussianDistribution d("2.05 3.45", "0.89 1.05"); + DiagonalGaussianDistribution d("2.05 3.45", "0.89 1.05"); // Make a sequence of observations. std::vector observations(1, arma::mat(2, 5000)); @@ -1394,10 +1394,10 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMHMMOneGaussianUnlabeledTrainingTest) { // Create a sequence of DiagonalGMMs. Each GMM has one gaussian distribution. std::vector gmms(2, DiagonalGMM(1, 2)); - gmms[0].Component(0) = DiagCovGaussianDistribution("1.25 2.10", + gmms[0].Component(0) = DiagonalGaussianDistribution("1.25 2.10", "0.97 1.00"); - gmms[1].Component(0) = DiagCovGaussianDistribution("-2.48 -3.02", + gmms[1].Component(0) = DiagonalGaussianDistribution("-2.48 -3.02", "1.02 0.80"); // Transition matrix. @@ -1467,13 +1467,13 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMHMMOneGaussianLabeledTrainingTest) { // Create a sequence of DiagonalGMMs. std::vector gmms(3, DiagonalGMM(1, 2)); - gmms[0].Component(0) = DiagCovGaussianDistribution("5.25 7.10", + gmms[0].Component(0) = DiagonalGaussianDistribution("5.25 7.10", "0.97 1.00"); - gmms[1].Component(0) = DiagCovGaussianDistribution("4.48 6.02", + gmms[1].Component(0) = DiagonalGaussianDistribution("4.48 6.02", "1.02 0.80"); - gmms[2].Component(0) = DiagCovGaussianDistribution("-3.28 -5.30", + gmms[2].Component(0) = DiagonalGaussianDistribution("-3.28 -5.30", "0.87 1.05"); // Transition matrix. @@ -1550,15 +1550,15 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMHMMMultipleGaussiansUnlabeledTrainingTest) // Create a sequence of DiagonalGMMs. std::vector gmms(2, DiagonalGMM(2, 2)); gmms[0].Weights() = arma::vec("0.3 0.7"); - gmms[0].Component(0) = DiagCovGaussianDistribution("8.25 7.10", + gmms[0].Component(0) = DiagonalGaussianDistribution("8.25 7.10", "0.97 1.00"); - gmms[0].Component(1) = DiagCovGaussianDistribution("-3.03 -2.28", + gmms[0].Component(1) = DiagonalGaussianDistribution("-3.03 -2.28", "1.20 0.89"); gmms[1].Weights() = arma::vec("0.4 0.6"); - gmms[1].Component(0) = DiagCovGaussianDistribution("4.48 6.02", + gmms[1].Component(0) = DiagonalGaussianDistribution("4.48 6.02", "1.02 0.80"); - gmms[1].Component(1) = DiagCovGaussianDistribution("-9.24 -8.40", + gmms[1].Component(1) = DiagonalGaussianDistribution("-9.24 -8.40", "0.85 1.58"); // Transition matrix. @@ -1657,15 +1657,15 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMHMMMultipleGaussiansLabeledTrainingTest) // Create a sequence of DiagonalGMMs. std::vector gmms(2, DiagonalGMM(2, 2)); gmms[0].Weights() = arma::vec("0.3 0.7"); - gmms[0].Component(0) = DiagCovGaussianDistribution("2.25 5.30", + gmms[0].Component(0) = DiagonalGaussianDistribution("2.25 5.30", "0.97 1.00"); - gmms[0].Component(1) = DiagCovGaussianDistribution("-3.15 -2.50", + gmms[0].Component(1) = DiagonalGaussianDistribution("-3.15 -2.50", "1.20 0.89"); gmms[1].Weights() = arma::vec("0.4 0.6"); - gmms[1].Component(0) = DiagCovGaussianDistribution("-4.48 -6.30", + gmms[1].Component(0) = DiagonalGaussianDistribution("-4.48 -6.30", "1.02 0.80"); - gmms[1].Component(1) = DiagCovGaussianDistribution("5.24 2.40", + gmms[1].Component(1) = DiagonalGaussianDistribution("5.24 2.40", "0.85 1.58"); // Transition matrix. diff --git a/src/mlpack/tests/main_tests/hmm_generate_test.cpp b/src/mlpack/tests/main_tests/hmm_generate_test.cpp index a56d08dc33..a00da689c8 100644 --- a/src/mlpack/tests/main_tests/hmm_generate_test.cpp +++ b/src/mlpack/tests/main_tests/hmm_generate_test.cpp @@ -182,15 +182,15 @@ BOOST_AUTO_TEST_CASE(HMMGenerateDiagonalGMMHMMCheckDimensionsTest) h->DiagGMMHMM()->Emission().resize(2); h->DiagGMMHMM()->Emission()[0] = DiagonalGMM(2, 2); h->DiagGMMHMM()->Emission()[0].Weights() = arma::vec("0.2 0.8"); - h->DiagGMMHMM()->Emission()[0].Component(0) = DiagCovGaussianDistribution( + h->DiagGMMHMM()->Emission()[0].Component(0) = DiagonalGaussianDistribution( "2.75 1.60", "0.50 0.50"); - h->DiagGMMHMM()->Emission()[0].Component(1) = DiagCovGaussianDistribution( + h->DiagGMMHMM()->Emission()[0].Component(1) = DiagonalGaussianDistribution( "6.15 2.51", "1.00 1.50"); h->DiagGMMHMM()->Emission()[1] = DiagonalGMM(2, 2); h->DiagGMMHMM()->Emission()[1].Weights() = arma::vec("0.4 0.6"); - h->DiagGMMHMM()->Emission()[1].Component(0) = DiagCovGaussianDistribution( + h->DiagGMMHMM()->Emission()[1].Component(0) = DiagonalGaussianDistribution( "-1.00 -3.42", "0.20 1.00"); - h->DiagGMMHMM()->Emission()[1].Component(1) = DiagCovGaussianDistribution( + h->DiagGMMHMM()->Emission()[1].Component(1) = DiagonalGaussianDistribution( "-3.10 -5.05", "1.20 0.80"); // Now that we have a trained HMM model, we can use it to generate a sequence diff --git a/src/mlpack/tests/main_tests/hmm_viterbi_test.cpp b/src/mlpack/tests/main_tests/hmm_viterbi_test.cpp index e7fa3a56c1..19fbbbaeac 100644 --- a/src/mlpack/tests/main_tests/hmm_viterbi_test.cpp +++ b/src/mlpack/tests/main_tests/hmm_viterbi_test.cpp @@ -179,15 +179,15 @@ BOOST_AUTO_TEST_CASE(HMMViterbiDiagonalGMMHMMCheckDimensionsTest) std::vector gmms(2, DiagonalGMM(2, 2)); gmms[0].Weights() = arma::vec("0.2 0.8"); - gmms[0].Component(0) = DiagCovGaussianDistribution("2.75 1.60", + gmms[0].Component(0) = DiagonalGaussianDistribution("2.75 1.60", "0.50 0.50"); - gmms[0].Component(1) = DiagCovGaussianDistribution("6.15 2.51", + gmms[0].Component(1) = DiagonalGaussianDistribution("6.15 2.51", "1.00 1.50"); gmms[1].Weights() = arma::vec("0.4 0.6"); - gmms[1].Component(0) = DiagCovGaussianDistribution("-1.00 -3.42", + gmms[1].Component(0) = DiagonalGaussianDistribution("-1.00 -3.42", "0.20 1.00"); - gmms[1].Component(1) = DiagCovGaussianDistribution("-3.10 -5.05", + gmms[1].Component(1) = DiagonalGaussianDistribution("-3.10 -5.05", "1.20 0.80"); // Transition matrix.