13 #ifndef MLPACK_CORE_DISTRIBUTIONS_DISCRETE_DISTRIBUTION_HPP 14 #define MLPACK_CORE_DISTRIBUTIONS_DISCRETE_DISTRIBUTION_HPP 21 namespace distribution {
64 arma::ones<arma::vec>(numObservations) / numObservations))
77 for (
size_t i = 0; i < numObservations.n_elem; i++)
79 const size_t numObs = size_t(numObservations[i]);
82 std::ostringstream oss;
83 oss <<
"number of observations for dimension " << i <<
" is 0, but " 84 <<
"must be greater than 0";
85 throw std::invalid_argument(oss.str());
87 probabilities.push_back(arma::ones<arma::vec>(numObs) / numObs);
99 for (
size_t i = 0; i < probabilities.size(); i++)
101 arma::vec temp = probabilities[i];
102 double sum = accu(temp);
104 this->probabilities.push_back(temp / sum);
107 this->probabilities.push_back(arma::ones<arma::vec>(temp.n_elem)
128 double probability = 1.0;
132 Log::Debug <<
"the obversation must has the same dimension with the probabilities" 133 <<
"the observation's dimension is" << observation.n_elem <<
"but the dimension of " 137 for (
size_t dimension = 0; dimension < observation.n_elem; dimension++)
141 const size_t obs = size_t(observation(dimension) + 0.5);
146 Log::Debug <<
"DiscreteDistribution::Probability(): received observation " 147 << obs <<
"; observation must be in [0, " <<
probabilities[dimension].n_elem
148 <<
"] for this distribution." << std::endl;
186 void Train(
const arma::mat& observations);
197 void Train(
const arma::mat& observations,
201 arma::vec&
Probabilities(
const size_t dim = 0) {
return probabilities[dim]; }
204 {
return probabilities[dim]; }
209 template<
typename Archive>
214 size_t dimensionality;
215 dimensionality = probabilities.size();
218 if (Archive::is_loading::value)
220 probabilities.clear();
221 probabilities.resize(dimensionality);
224 for (
size_t i = 0; i < dimensionality; ++i)
226 std::ostringstream oss;
227 oss <<
"probabilities" << i;
Linear algebra utility functions, generally performed on matrices or vectors.
void Serialize(Archive &ar, const unsigned int)
Serialize the distribution.
arma::vec Random() const
Return a randomly generated observation (one-dimensional vector; one observation) according to the pr...
std::vector< arma::vec > probabilities
The probabilities for each dimension; each arma::vec represents the probabilities for the observation...
A discrete distribution where the only observations are discrete observations.
The core includes that mlpack expects; standard C++ includes and Armadillo.
FirstShim< T > CreateNVP(T &t, const std::string &name, typename std::enable_if_t< HasSerialize< T >::value > *=0)
Call this function to produce a name-value pair; this is similar to BOOST_SERIALIZATION_NVP(), but should be used for types that have a Serialize() function (or contain a type that has a Serialize() function) instead of a serialize() function.
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.
DiscreteDistribution(const arma::Col< size_t > &numObservations)
Define the multidimensional discrete distribution as having numObservations possible observations...
const arma::vec & Probabilities(const size_t dim=0) const
Modify the vector of probabilities for the given dimension.
void Train(const arma::mat &observations)
Estimate the probability distribution directly from the given observations.
DiscreteDistribution(const std::vector< arma::vec > &probabilities)
Define the multidimensional discrete distribution as having the given probabilities for each observat...
double LogProbability(const arma::vec &observation) const
Return the log probability of the given observation.
arma::vec & Probabilities(const size_t dim=0)
Return the vector of probabilities for the given dimension.
static MLPACK_EXPORT util::NullOutStream Debug
MLPACK_EXPORT is required for global variables, so that they are properly exported by the Windows com...
Miscellaneous math random-related routines.
DiscreteDistribution(const size_t numObservations)
Define the discrete distribution as having numObservations possible observations. ...