[mlpack-svn] r10294 - mlpack/trunk/src/mlpack/methods/hmm/distributions

fastlab-svn at coffeetalk-1.cc.gatech.edu fastlab-svn at coffeetalk-1.cc.gatech.edu
Wed Nov 16 11:35:31 EST 2011


Author: rcurtin
Date: 2011-11-16 11:35:31 -0500 (Wed, 16 Nov 2011)
New Revision: 10294

Modified:
   mlpack/trunk/src/mlpack/methods/hmm/distributions/discrete_distribution.cpp
Log:
Make normalization safer; avoid division by 0.


Modified: mlpack/trunk/src/mlpack/methods/hmm/distributions/discrete_distribution.cpp
===================================================================
--- mlpack/trunk/src/mlpack/methods/hmm/distributions/discrete_distribution.cpp	2011-11-16 15:59:14 UTC (rev 10293)
+++ mlpack/trunk/src/mlpack/methods/hmm/distributions/discrete_distribution.cpp	2011-11-16 16:35:31 UTC (rev 10294)
@@ -41,7 +41,11 @@
     probabilities(*it)++;
 
   // Now normalize the distribution.
-  probabilities /= accu(probabilities);
+  double sum = accu(probabilities);
+  if (sum > 0)
+    probabilities /= sum;
+  else
+    probabilities.fill(1 / probabilities.n_elem); // Force normalization.
 }
 
 /**
@@ -59,7 +63,11 @@
     probabilities(observations[i]) += probObs[i];
 
   // Now normalize the distribution.
-  probabilities /= accu(probabilities);
+  double sum = accu(probabilities);
+  if (sum > 0)
+    probabilities /= sum;
+  else
+    probabilities.fill(1 / probabilities.n_elem); // Force normalization.
 }
 
 /**
@@ -67,5 +75,12 @@
  */
 void DiscreteDistribution::Probabilities(const arma::vec& probabilities)
 {
-  this->probabilities = probabilities / accu(probabilities);
+  double sum = accu(probabilities);
+  if (sum > 0)
+    this->probabilities = probabilities / sum;
+  else
+  {
+    this->probabilities.set_size(probabilities.n_elem);
+    this->probabilities.fill(1 / probabilities.n_elem);
+  }
 }




More information about the mlpack-svn mailing list