[mlpack-svn] r16139 - mlpack/trunk/src/mlpack/methods/gmm

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Tue Jan 14 12:46:13 EST 2014


Author: rcurtin
Date: Tue Jan 14 12:46:13 2014
New Revision: 16139

Log:
When using the constructors that don't specify a model, make sure we create an
actual valid GMM and not just random memory.


Modified:
   mlpack/trunk/src/mlpack/methods/gmm/gmm.hpp
   mlpack/trunk/src/mlpack/methods/gmm/gmm_impl.hpp

Modified: mlpack/trunk/src/mlpack/methods/gmm/gmm.hpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/gmm/gmm.hpp	(original)
+++ mlpack/trunk/src/mlpack/methods/gmm/gmm.hpp	Tue Jan 14 12:46:13 2014
@@ -104,19 +104,12 @@
 
   /**
    * Create a GMM with the given number of Gaussians, each of which have the
-   * specified dimensionality.
+   * specified dimensionality.  The means and covariances will be set to 0.
    *
    * @param gaussians Number of Gaussians in this GMM.
    * @param dimensionality Dimensionality of each Gaussian.
    */
-  GMM(const size_t gaussians, const size_t dimensionality) :
-      gaussians(gaussians),
-      dimensionality(dimensionality),
-      means(gaussians, arma::vec(dimensionality)),
-      covariances(gaussians, arma::mat(dimensionality, dimensionality)),
-      weights(gaussians),
-      localFitter(FittingType()),
-      fitter(localFitter) { /* Nothing to do. */ }
+  GMM(const size_t gaussians, const size_t dimensionality);
 
   /**
    * Create a GMM with the given number of Gaussians, each of which have the
@@ -130,13 +123,7 @@
    */
   GMM(const size_t gaussians,
       const size_t dimensionality,
-      FittingType& fitter) :
-      gaussians(gaussians),
-      dimensionality(dimensionality),
-      means(gaussians, arma::vec(dimensionality)),
-      covariances(gaussians, arma::mat(dimensionality, dimensionality)),
-      weights(gaussians),
-      fitter(fitter) { /* Nothing to do. */ }
+      FittingType& fitter);
 
   /**
    * Create a GMM with the given means, covariances, and weights.

Modified: mlpack/trunk/src/mlpack/methods/gmm/gmm_impl.hpp
==============================================================================
--- mlpack/trunk/src/mlpack/methods/gmm/gmm_impl.hpp	(original)
+++ mlpack/trunk/src/mlpack/methods/gmm/gmm_impl.hpp	Tue Jan 14 12:46:13 2014
@@ -16,6 +16,64 @@
 namespace mlpack {
 namespace gmm {
 
+/**
+ * Create a GMM with the given number of Gaussians, each of which have the
+ * specified dimensionality.  The means and covariances will be set to 0.
+ *
+ * @param gaussians Number of Gaussians in this GMM.
+ * @param dimensionality Dimensionality of each Gaussian.
+ */
+template<typename FittingType>
+GMM<FittingType>::GMM(const size_t gaussians, const size_t dimensionality) :
+    gaussians(gaussians),
+    dimensionality(dimensionality),
+    means(gaussians, arma::vec(dimensionality)),
+    covariances(gaussians, arma::mat(dimensionality, dimensionality)),
+    weights(gaussians),
+    localFitter(FittingType()),
+    fitter(localFitter)
+{
+  // Clear the memory; set it to 0.  Technically this model is still valid, but
+  // only barely.
+  weights.fill(1.0 / gaussians);
+  for (size_t i = 0; i < gaussians; ++i)
+  {
+    means[i].zeros();
+    covariances[i].eye();
+  }
+}
+
+/**
+ * Create a GMM with the given number of Gaussians, each of which have the
+ * specified dimensionality.  Also, pass in an initialized FittingType class;
+ * this is useful in cases where the FittingType class needs to store some
+ * state.
+ *
+ * @param gaussians Number of Gaussians in this GMM.
+ * @param dimensionality Dimensionality of each Gaussian.
+ * @param fitter Initialized fitting mechanism.
+ */
+template<typename FittingType>
+GMM<FittingType>::GMM(const size_t gaussians,
+                      const size_t dimensionality,
+                      FittingType& fitter) :
+    gaussians(gaussians),
+    dimensionality(dimensionality),
+    means(gaussians, arma::vec(dimensionality)),
+    covariances(gaussians, arma::mat(dimensionality, dimensionality)),
+    weights(gaussians),
+    fitter(fitter)
+{
+  // Clear the memory; set it to 0.  Technically this model is still valid, but
+  // only barely.
+  weights.fill(1.0 / gaussians);
+  for (size_t i = 0; i < gaussians; ++i)
+  {
+    means[i].zeros();
+    covariances[i].eye();
+  }
+}
+
 // Copy constructor.
 template<typename FittingType>
 template<typename OtherFittingType>



More information about the mlpack-svn mailing list