KrisLibrary  1.0.0
CategoricalDistribution.h
1 #ifndef CATEGORICAL_DISTRIBUTION_H
2 #define CATEGORICAL_DISTRIBUTION_H
3 
4 #include "ProbabilityDistribution.h"
5 #include <map>
6 #include <KrisLibrary/math/cast.h>
7 
8 namespace Statistics {
9 
11 {
13  CategoricalDistribution(const std::vector<Real>& w);
14  virtual ~CategoricalDistribution() {}
15  void SetWeights(const std::vector<Real>& w);
16  void SetValues(const std::vector<Real>& values);
17  virtual void GetParameters(Vector& parameters);
18  virtual void SetParameters(const Vector& parameters);
19  virtual Real PDF(Real value);
20  virtual Real CDF(Real value);
21  virtual bool IsDiscrete() { return true; }
22  virtual Real Minimum();
23  virtual Real Maximum();
24  virtual Real Mean();
25  virtual Real Variance();
26  virtual Real Skewness();
27  virtual Real Kurtosis();
28  virtual Real Sample();
29  virtual bool CanSample() { return true; }
30 
31  std::vector<Real> p; //the probability of items 0 through n
32  std::vector<Real> cp; //the cumulative probability of items 0 through n
33  std::vector<Real> values; //an optional sorted vector of size n giving the values
34 };
35 
37 {
38  CategoricalMAPModel(const std::vector<Real>& priors);
39  CategoricalMAPModel(const std::vector<Real>& values,const std::vector<Real>& priors);
40  CategoricalDistribution* Estimate();
41  void MaximumLikelihood(const std::vector<Real>& data);
42  void AddSample(Real value,Real weight=1.0) {
43  if(counts.count(value)==0) counts[value]=weight;
44  else counts[value]+=weight;
45  }
46 
47  std::map<Real,Real> counts;
48 };
49 
50 } //namespace Statistics
51 
52 #endif
Definition: CategoricalDistribution.h:36
Definition: ProbabilityDistribution.h:14
Contains all definitions in the statistics directory.
Definition: BernoulliDistribution.h:6
Definition: CategoricalDistribution.h:10