MLPACK  1.0.11
discrete_distribution.hpp
Go to the documentation of this file.
1 
23 #ifndef __MLPACK_METHODS_HMM_DISTRIBUTIONS_DISCRETE_DISTRIBUTION_HPP
24 #define __MLPACK_METHODS_HMM_DISTRIBUTIONS_DISCRETE_DISTRIBUTION_HPP
25 
26 #include <mlpack/core.hpp>
27 
28 namespace mlpack {
29 namespace distribution {
30 
54 {
55  public:
59  DiscreteDistribution() { /* nothing to do */ }
60 
69  DiscreteDistribution(const size_t numObservations) :
70  probabilities(arma::ones<arma::vec>(numObservations) / numObservations)
71  { /* nothing to do */ }
72 
80  {
81  // We must be sure that our distribution is normalized.
82  double sum = accu(probabilities);
83  if (sum > 0)
84  this->probabilities = probabilities / sum;
85  else
86  {
87  this->probabilities.set_size(probabilities.n_elem);
88  this->probabilities.fill(1 / probabilities.n_elem);
89  }
90  }
91 
95  size_t Dimensionality() const { return 1; }
96 
105  double Probability(const arma::vec& observation) const
106  {
107  // Adding 0.5 helps ensure that we cast the floating point to a size_t
108  // correctly.
109  const size_t obs = size_t(observation[0] + 0.5);
110 
111  // Ensure that the observation is within the bounds.
112  if (obs >= probabilities.n_elem)
113  {
114  Log::Debug << "DiscreteDistribution::Probability(): received observation "
115  << obs << "; observation must be in [0, " << probabilities.n_elem
116  << "] for this distribution." << std::endl;
117  }
118 
119  return probabilities(obs);
120  }
121 
129  arma::vec Random() const;
130 
138  void Estimate(const arma::mat& observations);
139 
149  void Estimate(const arma::mat& observations,
150  const arma::vec& probabilities);
151 
153  const arma::vec& Probabilities() const { return probabilities; }
155  arma::vec& Probabilities() { return probabilities; }
156 
157  /*
158  * Returns a string representation of this object.
159  */
160  std::string ToString() const;
161 
162  private:
163  arma::vec probabilities;
164 };
165 
166 }; // namespace distribution
167 }; // namespace mlpack
168 
169 #endif
DiscreteDistribution(const arma::vec &probabilities)
Define the discrete distribution as having the given probabilities for each observation.
arma::vec Random() const
Return a randomly generated observation (one-dimensional vector; one observation) according to the pr...
A discrete distribution where the only observations are discrete observations.
size_t Dimensionality() const
Get the dimensionality of the distribution.
double Probability(const arma::vec &observation) const
Return the probability of the given observation.
DiscreteDistribution()
Default constructor, which creates a distribution that has no observations.
arma::vec & Probabilities()
Modify the vector of probabilities.
static util::NullOutStream Debug
Dumps debug output into the bit nether regions.
Definition: log.hpp:84
void Estimate(const arma::mat &observations)
Estimate the probability distribution directly from the given observations.
const arma::vec & Probabilities() const
Return the vector of probabilities.
DiscreteDistribution(const size_t numObservations)
Define the discrete distribution as having numObservations possible observations. ...