[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