Darwin  1.10(beta)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
drwnGaussian.h
1 /******************************************************************************
2 ** DARWIN: A FRAMEWORK FOR MACHINE LEARNING RESEARCH AND DEVELOPMENT
3 ** Distributed under the terms of the BSD license (see the LICENSE file)
4 ** Copyright (c) 2007-2015, Stephen Gould
5 ** All rights reserved.
6 **
7 ******************************************************************************
8 ** FILENAME: drwnGaussian.h
9 ** AUTHOR(S): Stephen Gould <stephen.gould@anu.edu.au>
10 **
11 *****************************************************************************/
12 
13 #pragma once
14 
15 #include <vector>
16 #include <limits>
17 
18 #include "Eigen/Core"
19 #include "Eigen/Cholesky"
20 #include "Eigen/LU"
21 
22 #include "drwnBase.h"
23 #include "drwnSuffStats.h"
24 
25 using namespace std;
26 using namespace Eigen;
27 
29 
30 // drwnGaussian class --------------------------------------------------------
37 
38 class drwnGaussian : public drwnStdObjIface {
39  public:
40  static bool AUTO_RIDGE;
41 
42  private:
43  int _n;
44  VectorXd _mu;
45  MatrixXd _mSigma;
46 
47  mutable MatrixXd *_invSigma;
48  mutable double _logZ;
49  mutable MatrixXd *_mL;
50 
51  public:
53  drwnGaussian(int n = 1);
55  drwnGaussian(const VectorXd& mu, double sigma2);
57  drwnGaussian(const VectorXd& mu, const MatrixXd& sigma2);
59  drwnGaussian(const vector<double>& mu, double sigma2);
61  drwnGaussian(const drwnSuffStats& stats);
63  drwnGaussian(const drwnGaussian& model);
64  ~drwnGaussian();
65 
66  // initialization
68  void initialize(int n);
70  void initialize(const VectorXd& mu, double sigma2);
72  void initialize(const VectorXd& mu, const MatrixXd& sigma2);
73 
74  // marginalization
77  drwnGaussian *marginalize(const vector<int> & indx) const;
78 
79  // conditioning
82  drwnGaussian reduce(const vector<double>& x, const vector<int>& indx) const;
84  drwnGaussian reduce(const map<int, double>& x) const;
86  drwnConditionalGaussian conditionOn(const vector<int>& indx) const;
87 
88  // i/o
89  const char *type() const { return "drwnGaussian"; }
90  drwnGaussian *clone() const { return new drwnGaussian(*this); }
91  bool save(drwnXMLNode& xml) const;
92  bool load(drwnXMLNode& xml);
93 
94  // evaluate (log-likelihood)
96  void evaluate(const MatrixXd& x, VectorXd& p) const;
98  void evaluate(const vector<vector<double> >& x, vector<double>& p) const;
100  double evaluateSingle(const VectorXd& x) const;
102  double evaluateSingle(const vector<double>& x) const;
104  double evaluateSingle(double x) const;
105 
106  // sampling
108  void sample(VectorXd& x) const;
110  void sample(vector<double>& x) const;
111 
112  // learn parameters
116  void train(const MatrixXd& x, double lambda = 0.0);
118  void train(const vector<vector<double> >& x, double lambda = 0.0);
120  void train(const vector<double> &x, double lambda = 0.0);
122  void train(const drwnSuffStats& stats, double lambda = 0.0);
123 
124  // access
126  unsigned dimension() const { return _n; }
128  const VectorXd& mean() const { return _mu; }
130  const MatrixXd& covariance() const { return _mSigma; }
132  double logPartitionFunction() const;
133 
135  double klDivergence(const drwnGaussian& model) const;
138  double klDivergence(const drwnSuffStats& stats) const;
139 
140  // standard operators
142  drwnGaussian& operator=(const drwnGaussian& model);
143 
144  protected:
145  inline void guaranteeInvSigma() const;
146  void freeCachedParameters();
147  void updateCachedParameters();
148 };
149 
150 // drwnConditionalGaussian class ---------------------------------------------
161 
163  protected:
164  int _n;
165  int _m;
166  VectorXd _mu;
167  MatrixXd _mSigma;
168  MatrixXd _mSigmaGain;
169 
170  public:
172  drwnConditionalGaussian(const VectorXd& mu, const MatrixXd& Sigma,
173  const MatrixXd& SigmaGain);
177 
178  // i/o
179  const char *type() const { return "drwnConditionalGaussian"; }
180  drwnConditionalGaussian *clone() const { return new drwnConditionalGaussian(*this); }
181  bool save(drwnXMLNode& xml) const;
182  bool load(drwnXMLNode& xml);
183 
184  // construct gaussian given observation
186  drwnGaussian reduce(const VectorXd& x);
188  drwnGaussian reduce(const vector<double>& x);
189 };
190 
191 
192 
drwnConditionalGaussian * clone() const
returns a copy of the class usually implemented as virtual Foo* clone() { return new Foo(*this); } ...
Definition: drwnGaussian.h:180
drwnGaussian * clone() const
returns a copy of the class usually implemented as virtual Foo* clone() { return new Foo(*this); } ...
Definition: drwnGaussian.h:90
MatrixXd _mSigma
n-by-n element covariance matrix
Definition: drwnGaussian.h:167
unsigned dimension() const
returns the dimensionality of the gaussian
Definition: drwnGaussian.h:126
VectorXd _mu
n element mean vector
Definition: drwnGaussian.h:166
MatrixXd _mSigmaGain
m-by-n gain matrix
Definition: drwnGaussian.h:168
const VectorXd & mean() const
returns the mean of the gaussian
Definition: drwnGaussian.h:128
int _n
dimensionality of unobserved features
Definition: drwnGaussian.h:164
const char * type() const
returns object type as a string (e.g., Foo::type() { return "Foo"; })
Definition: drwnGaussian.h:89
const char * type() const
returns object type as a string (e.g., Foo::type() { return "Foo"; })
Definition: drwnGaussian.h:179
Implements a multi-variate gaussian distribution.
Definition: drwnGaussian.h:38
Implements a class for accumulating first- and second-order sufficient statistics (moments)...
Definition: drwnSuffStats.h:43
const MatrixXd & covariance() const
returns the covariance matrix for the gaussian
Definition: drwnGaussian.h:130
Utility class for generating conditonal gaussian distribution.
Definition: drwnGaussian.h:162
standard Darwin object interface (cloneable and writeable)
Definition: drwnInterfaces.h:72
int _m
dimensionality of observed features (i.e., those conditioned on)
Definition: drwnGaussian.h:165