KrisLibrary  1.0.0
gaussian.h
1 #ifndef MATH_GAUSSIAN_H
2 #define MATH_GAUSSIAN_H
3 
4 #include "MatrixTemplate.h"
5 #include <vector>
6 
7 namespace Math {
8 
25 template <class T>
26 class Gaussian
27 {
28 public:
29  typedef Gaussian<T> MyT;
30  typedef VectorTemplate<T> VectorT;
31  typedef MatrixTemplate<T> MatrixT;
32 
33  Gaussian();
34  Gaussian(int d);
35  Gaussian(const MatrixT& sigma, const VectorT& mu);
36  Gaussian(const MyT& g);
37 
38  void resize(int d);
39  int numDims() const;
40  int degeneracy() const;
41  Real normalizationFactor() const;
42 
44  bool setCovariance(const MatrixT& sigma,int verbose=1);
45  void getCovariance(MatrixT& sigma) const;
46  void getVariance(VectorT& sigma) const;
47  void getPrecision(MatrixT& sigma) const;
48  void setMean(const VectorT& mu);
49  const VectorT& getMean() const { return mu; }
50 
52  bool setMaximumLikelihood(const std::vector<VectorT>& examples,int verbose=1);
53  bool setMaximumLikelihood(const std::vector<VectorT>& examples,const std::vector<Real>& weights,int verbose=1);
54  void setMaximumLikelihoodDiagonal(const std::vector<VectorT>& examples);
55  void setMaximumLikelihoodDiagonal(const std::vector<VectorT>& examples,const std::vector<Real>& weights);
57  bool setMaximumAPosteriori(const std::vector<VectorT>& examples,
58  const VectorT& meanprior,T meanStrength,const MatrixT& covprior,T covStrength,int verbose=1);
59  bool setMaximumAPosteriori(const std::vector<VectorT>& examples,const std::vector<Real>& weights,
60  const VectorT& meanprior,T meanStrength,const MatrixT& covprior,T covStrength,int verbose=1);
61  void setMaximumAPosterioriDiagonal(const std::vector<VectorT>& examples,
62  const VectorT& meanprior,T meanStrength,const VectorT& varprior,T covStrength);
63  void setMaximumAPosterioriDiagonal(const std::vector<VectorT>& examples,const std::vector<Real>& weights,
64  const VectorT& meanprior,T meanStrength,const VectorT& varprior,T covStrength);
65 
67  T probability(const VectorT& x) const;
69  T logProbability(const VectorT& x) const;
71  T partialProbability(const VectorT& x,const std::vector<int>& elements) const;
73  T logPartialProbability(const VectorT& x,const std::vector<int>& elements) const;
75  void generate(VectorT& x) const;
76 
77  //combines the two gaussian distributions into an uncorrelated
78  //joint distribution
79  void setJoint(const MyT& g1,const MyT& g2);
80  //combines the two gaussian distributions into a correlated
81  //joint distribution
82  void setJoint(const MyT& g1,const MyT& g2,const MatrixT& corr);
83  //marginalizes the distribution g over the element i
84  void setMarginalized(const MyT& g,int i);
85  //marginalizes the distribution g over the given elements
86  void setMarginalized(const MyT& g,const std::vector<int>& elements);
87  //sets the conditional distribution of g given x(i) = xi
88  void setConditional(const MyT& g,Real xi,int i);
89  //sets the conditional distribution of g given elements x(elements[i]) = x(i)
90  void setConditional(const MyT& g,const VectorT& x,const std::vector<int>& elements);
91 
92  //computes KL divergence of g from this: D(g||this)
93  T klDivergence(const MyT& g) const;
94 
95  MatrixT L;
96  VectorT mu;
97 };
98 
101 template <class T>
102 void GaussianCondition(const VectorTemplate<T>& mean,
103  const MatrixTemplate<T>& cov,
104  const VectorTemplate<T>& x,
105  const std::vector<int>& elements,
106  VectorTemplate<T>& newmean,
107  MatrixTemplate<T>& newcov);
108 
110 template <class T>
111 void GaussianMarginalize(const VectorTemplate<T>& mean,
112  const MatrixTemplate<T>& cov,
113  const std::vector<int>& elements,
114  VectorTemplate<T>& newmean,
115  MatrixTemplate<T>& newcov);
116 
118 template <class T>
119 void GaussianTransform(const VectorTemplate<T>& mean,
120  const MatrixTemplate<T>& cov,
121  const MatrixTemplate<T>& A,
122  const VectorTemplate<T>& b,
123  VectorTemplate<T>& newmean,
124  MatrixTemplate<T>& newcov);
125 
128 template <class T>
130  const MatrixTemplate<T>& cov,
131  const MatrixTemplate<T>& A,
132  const VectorTemplate<T>& b,
133  VectorTemplate<T>& jointmean,
134  MatrixTemplate<T>& jointcov);
135 
136 }
137 
138 #endif
void generate(VectorT &x) const
Generates a point x according to this distribution.
Definition: gaussian.cpp:514
VectorT mu
mean
Definition: gaussian.h:96
void GaussianTransform(const VectorTemplate< T > &mean, const MatrixTemplate< T > &cov, const MatrixTemplate< T > &A, const VectorTemplate< T > &b, VectorTemplate< T > &newmean, MatrixTemplate< T > &newcov)
transforms the distribution N(mean,cov) with the linear transform Ax+b
Definition: gaussian.cpp:775
T logPartialProbability(const VectorT &x, const std::vector< int > &elements) const
Evaluates the log partial probability.
Definition: gaussian.cpp:482
void GaussianMarginalize(const VectorTemplate< T > &mean, const MatrixTemplate< T > &cov, const std::vector< int > &elements, VectorTemplate< T > &newmean, MatrixTemplate< T > &newcov)
marginalizes the distribution N(mean,cov) over the given elements
Definition: gaussian.cpp:738
Multivariate gaussian N(mu,K) of d dimensions.
Definition: gaussian.h:26
T partialProbability(const VectorT &x, const std::vector< int > &elements) const
Evaluates the probability of a partial setting x(elements[i])=x[i].
Definition: gaussian.cpp:454
MatrixT L
Cholesky decomposition of the covariance matrix.
Definition: gaussian.h:95
bool setMaximumLikelihood(const std::vector< VectorT > &examples, int verbose=1)
ML estimation.
Definition: gaussian.cpp:147
bool setCovariance(const MatrixT &sigma, int verbose=1)
Covariance matrix must be symmetric, strictly positive definite.
Definition: gaussian.cpp:60
T logProbability(const VectorT &x) const
Evaluates the log-probability of x.
Definition: gaussian.cpp:430
void GaussianTransformJoint(const VectorTemplate< T > &xmean, const MatrixTemplate< T > &xcov, const MatrixTemplate< T > &A, const VectorTemplate< T > &b, VectorTemplate< T > &jointmean, MatrixTemplate< T > &jointcov)
Definition: gaussian.cpp:790
T probability(const VectorT &x) const
Evaluates the probability of x.
Definition: gaussian.cpp:408
A matrix over the field T.
Definition: function.h:10
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
A vector over the field T.
Definition: function.h:9
void GaussianCondition(const VectorTemplate< T > &mean, const MatrixTemplate< T > &cov, const VectorTemplate< T > &x, const std::vector< int > &elements, VectorTemplate< T > &newmean, MatrixTemplate< T > &newcov)
Definition: gaussian.cpp:657
bool setMaximumAPosteriori(const std::vector< VectorT > &examples, const VectorT &meanprior, T meanStrength, const MatrixT &covprior, T covStrength, int verbose=1)
MAP estimation with inverse weishart distribution.
Definition: gaussian.cpp:276