Change DiagCovGaussianDistribution to DiagonalGaussianDistribution
This commit is contained in:
+1
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -281,7 +281,7 @@
|
||||
#include <mlpack/core/dists/gaussian_distribution.hpp>
|
||||
#include <mlpack/core/dists/laplace_distribution.hpp>
|
||||
#include <mlpack/core/dists/gamma_distribution.hpp>
|
||||
#include <mlpack/core/dists/diag_cov_gaussian_distribution.hpp>
|
||||
#include <mlpack/core/dists/diagonal_gaussian_distribution.hpp>
|
||||
|
||||
// mlpack::backtrace only for linux
|
||||
#ifdef HAS_BFD_DL
|
||||
|
||||
@@ -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
|
||||
|
||||
+12
-12
@@ -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 <mlpack/methods/gmm/diagonal_constraint.hpp>
|
||||
|
||||
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<arma::vec>(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)
|
||||
{
|
||||
+9
-9
@@ -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 <mlpack/prereqs.hpp>
|
||||
|
||||
@@ -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<arma::vec>(dimension)),
|
||||
covariance(arma::ones<arma::vec>(dimension)),
|
||||
invCov(arma::ones<arma::vec>(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
|
||||
{
|
||||
@@ -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<distribution::DiagCovGaussianDistribution>& dists,
|
||||
const std::vector<distribution::DiagonalGaussianDistribution>& dists,
|
||||
const arma::vec& weights) const
|
||||
{
|
||||
double logLikelihood = 0;
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#define MLPACK_METHODS_GMM_DIAGONAL_GMM_HPP
|
||||
|
||||
#include <mlpack/prereqs.hpp>
|
||||
#include <mlpack/core/dists/diag_cov_gaussian_distribution.hpp>
|
||||
#include <mlpack/core/dists/diagonal_gaussian_distribution.hpp>
|
||||
|
||||
// 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<distribution::DiagCovGaussianDistribution>& dists,
|
||||
* arma::vec& weights);
|
||||
* void Estimate(
|
||||
* const arma::mat& observations,
|
||||
* std::vector<distribution::DiagonalGaussianDistribution>& dists,
|
||||
* arma::vec& weights);
|
||||
*
|
||||
* void Estimate(const arma::mat& observations,
|
||||
* const arma::vec& probabilities,
|
||||
* std::vector<distribution::DiagCovGaussianDistribution>& dists,
|
||||
* arma::vec& weights);
|
||||
* void Estimate(
|
||||
* const arma::mat& observations,
|
||||
* const arma::vec& probabilities,
|
||||
* std::vector<distribution::DiagonalGaussianDistribution>& dists,
|
||||
* arma::vec& weights);
|
||||
* @endcode
|
||||
*
|
||||
* Example use:
|
||||
@@ -75,7 +77,7 @@ class DiagonalGMM
|
||||
size_t dimensionality;
|
||||
|
||||
//! Vector of Gaussians
|
||||
std::vector<distribution::DiagCovGaussianDistribution> dists;
|
||||
std::vector<distribution::DiagonalGaussianDistribution> 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<distribution::DiagCovGaussianDistribution>&
|
||||
DiagonalGMM(const std::vector<distribution::DiagonalGaussianDistribution>&
|
||||
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<typename InitialClusteringType = kmeans::KMeans<>>
|
||||
void Estimate(const arma::mat& observations,
|
||||
std::vector<distribution::DiagCovGaussianDistribution>& dists,
|
||||
std::vector<distribution::DiagonalGaussianDistribution>& dists,
|
||||
arma::vec& weights,
|
||||
const bool useInitialModel = false,
|
||||
const size_t maxIterations = 300,
|
||||
@@ -321,7 +323,7 @@ class DiagonalGMM
|
||||
template<typename InitialClusteringType = kmeans::KMeans<>>
|
||||
void Estimate(const arma::mat& observations,
|
||||
const arma::vec& probabilities,
|
||||
std::vector<distribution::DiagCovGaussianDistribution>& dists,
|
||||
std::vector<distribution::DiagonalGaussianDistribution>& 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<distribution::DiagCovGaussianDistribution>& dists,
|
||||
const std::vector<distribution::DiagonalGaussianDistribution>& dists,
|
||||
const arma::vec& weights) const;
|
||||
|
||||
/**
|
||||
@@ -362,7 +364,7 @@ class DiagonalGMM
|
||||
template<typename InitialClusteringType = kmeans::KMeans<>>
|
||||
void InitialClustering(
|
||||
const arma::mat& observations,
|
||||
std::vector<distribution::DiagCovGaussianDistribution>& dists,
|
||||
std::vector<distribution::DiagonalGaussianDistribution>& dists,
|
||||
arma::vec& weights,
|
||||
InitialClusteringType clusterer = InitialClusteringType());
|
||||
|
||||
@@ -385,7 +387,7 @@ class DiagonalGMM
|
||||
template<typename InitialClusteringType = kmeans::KMeans<>>
|
||||
void ArmadilloGMMWrapper(
|
||||
const arma::mat& observations,
|
||||
std::vector<distribution::DiagCovGaussianDistribution>& dists,
|
||||
std::vector<distribution::DiagonalGaussianDistribution>& dists,
|
||||
arma::vec& weights,
|
||||
const bool useInitialModel = false,
|
||||
const size_t maxIterations = 300,
|
||||
|
||||
@@ -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<distribution::DiagCovGaussianDistribution> distsOrig;
|
||||
std::vector<distribution::DiagonalGaussianDistribution> 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<distribution::DiagCovGaussianDistribution> distsTrial(gaussians,
|
||||
distribution::DiagCovGaussianDistribution(dimensionality));
|
||||
std::vector<distribution::DiagonalGaussianDistribution> 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<distribution::DiagCovGaussianDistribution> distsOrig;
|
||||
std::vector<distribution::DiagonalGaussianDistribution> 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<distribution::DiagCovGaussianDistribution> distsTrial(gaussians,
|
||||
distribution::DiagCovGaussianDistribution(dimensionality));
|
||||
std::vector<distribution::DiagonalGaussianDistribution> 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<typename InitialClusteringType>
|
||||
void DiagonalGMM::Estimate(
|
||||
const arma::mat& observations,
|
||||
std::vector<distribution::DiagCovGaussianDistribution>& dists,
|
||||
std::vector<distribution::DiagonalGaussianDistribution>& dists,
|
||||
arma::vec& weights,
|
||||
const bool useInitialModel,
|
||||
const size_t maxIterations,
|
||||
@@ -291,7 +291,7 @@ void DiagonalGMM::Estimate(
|
||||
template<typename InitialClusteringType>
|
||||
void DiagonalGMM::Estimate(const arma::mat& observations,
|
||||
const arma::vec& probabilities,
|
||||
std::vector<distribution::DiagCovGaussianDistribution>& dists,
|
||||
std::vector<distribution::DiagonalGaussianDistribution>& dists,
|
||||
arma::vec& weights,
|
||||
const bool useInitialModel,
|
||||
const size_t maxIterations,
|
||||
@@ -382,7 +382,7 @@ void DiagonalGMM::Estimate(const arma::mat& observations,
|
||||
template<typename InitialClusteringType>
|
||||
void DiagonalGMM::InitialClustering(
|
||||
const arma::mat& observations,
|
||||
std::vector<distribution::DiagCovGaussianDistribution>& dists,
|
||||
std::vector<distribution::DiagonalGaussianDistribution>& dists,
|
||||
arma::vec& weights,
|
||||
InitialClusteringType clusterer)
|
||||
{
|
||||
@@ -451,7 +451,7 @@ void DiagonalGMM::InitialClustering(
|
||||
template<typename InitialClusteringType>
|
||||
void DiagonalGMM::ArmadilloGMMWrapper(
|
||||
const arma::mat& observations,
|
||||
std::vector<distribution::DiagCovGaussianDistribution>& dists,
|
||||
std::vector<distribution::DiagonalGaussianDistribution>& dists,
|
||||
arma::vec& weights,
|
||||
const bool useInitialModel,
|
||||
const size_t maxIterations,
|
||||
|
||||
@@ -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<arma::vec>(3);
|
||||
arma::vec covariance = arma::randu<arma::vec>(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<arma::vec>(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<arma::vec>(4)) + mean;
|
||||
|
||||
DiagCovGaussianDistribution d1;
|
||||
DiagCovGaussianDistribution d2;
|
||||
DiagonalGaussianDistribution d1;
|
||||
DiagonalGaussianDistribution d2;
|
||||
|
||||
// Estimate
|
||||
d1.Train(obs);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -1243,18 +1243,18 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMHMMPredictTest)
|
||||
std::vector<DiagonalGMM> 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<DiagCovGaussianDistribution> hmm(3, DiagCovGaussianDistribution(2));
|
||||
HMM<DiagonalGaussianDistribution> 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<arma::mat> observations(1);
|
||||
@@ -1331,7 +1331,7 @@ BOOST_AUTO_TEST_CASE(DiagonalGMMHMMGenerateTest)
|
||||
hmm.Generate(10000, observations[0], states[0], 1);
|
||||
|
||||
// Build the hmm2.
|
||||
HMM<DiagCovGaussianDistribution> hmm2(3, DiagCovGaussianDistribution(2));
|
||||
HMM<DiagonalGaussianDistribution> 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<arma::mat> 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<DiagonalGMM> 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<DiagonalGMM> 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<DiagonalGMM> 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<DiagonalGMM> 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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -179,15 +179,15 @@ BOOST_AUTO_TEST_CASE(HMMViterbiDiagonalGMMHMMCheckDimensionsTest)
|
||||
std::vector<DiagonalGMM> 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.
|
||||
|
||||
Reference in New Issue
Block a user