discrete_distribution.hpp

Go to the documentation of this file.
00001 
00023 #ifndef __MLPACK_METHODS_HMM_DISTRIBUTIONS_DISCRETE_DISTRIBUTION_HPP
00024 #define __MLPACK_METHODS_HMM_DISTRIBUTIONS_DISCRETE_DISTRIBUTION_HPP
00025 
00026 #include <mlpack/core.hpp>
00027 
00028 namespace mlpack {
00029 namespace distribution  {
00030 
00053 class DiscreteDistribution
00054 {
00055  public:
00059   DiscreteDistribution() { /* nothing to do */ }
00060 
00069   DiscreteDistribution(const size_t numObservations) :
00070       probabilities(arma::ones<arma::vec>(numObservations) / numObservations)
00071   { /* nothing to do */ }
00072 
00079   DiscreteDistribution(const arma::vec& probabilities)
00080   {
00081     // We must be sure that our distribution is normalized.
00082     double sum = accu(probabilities);
00083     if (sum > 0)
00084       this->probabilities = probabilities / sum;
00085     else
00086     {
00087       this->probabilities.set_size(probabilities.n_elem);
00088       this->probabilities.fill(1 / probabilities.n_elem);
00089     }
00090   }
00091 
00095   size_t Dimensionality() const { return 1; }
00096 
00105   double Probability(const arma::vec& observation) const
00106   {
00107     // Adding 0.5 helps ensure that we cast the floating point to a size_t
00108     // correctly.
00109     const size_t obs = size_t(observation[0] + 0.5);
00110 
00111     // Ensure that the observation is within the bounds.
00112     if (obs >= probabilities.n_elem)
00113     {
00114       Log::Debug << "DiscreteDistribution::Probability(): received observation "
00115           << obs << "; observation must be in [0, " << probabilities.n_elem
00116           << "] for this distribution." << std::endl;
00117     }
00118 
00119     return probabilities(obs);
00120   }
00121 
00129   arma::vec Random() const;
00130 
00138   void Estimate(const arma::mat& observations);
00139 
00149   void Estimate(const arma::mat& observations,
00150                 const arma::vec& probabilities);
00151 
00153   const arma::vec& Probabilities() const { return probabilities; }
00155   arma::vec& Probabilities() { return probabilities; }
00156 
00157   /*
00158    * Returns a string representation of this object.
00159    */
00160   std::string ToString() const;
00161 
00162  private:
00163   arma::vec probabilities;
00164 };
00165 
00166 }; // namespace distribution
00167 }; // namespace mlpack
00168 
00169 #endif

Generated on 13 Aug 2014 for MLPACK by  doxygen 1.6.1