KrisLibrary  1.0.0
LinearProcessHMM.h
1 #ifndef STATISTICS_LINEAR_PROCESS_HMM_H
2 #define STATISTICS_LINEAR_PROCESS_HMM_H
3 
4 #include "GaussianMixtureModel.h"
5 
6 namespace Statistics {
7  using namespace Math;
8 
10 {
11  public:
12  Real Probability(const Vector& x,const Vector& y) const;
13  Real LogProbability(const Vector& x,const Vector& y) const;
14  void GetY(const Vector& x,Gaussian<Real>& y) const;
15  void GetY(const Vector& x,Vector& ymean,Matrix& ycov) const;
16  void GetY(const Vector& xmean,const Matrix& xcov,Vector& ymean,Matrix& ycov) const;
17  void GetJoint(const Vector& xmean,const Matrix& xcov,Vector& xymean,Matrix& xycov) const;
18  bool OLS(const std::vector<Vector>& x,
19  const std::vector<Vector>& y,
20  int verbose=1);
21  bool WeightedOLS(const std::vector<Vector>& x,
22  const std::vector<Vector>& y,
23  const std::vector<Real>& w,
24  int verbose=1);
25 
26  Matrix A;
27  Gaussian<Real> error;
28 };
29 
45 {
46 public:
48  LinearProcessHMM(int k,int d);
50 
51  int NumDims() const;
52  void Resize(int k,int d);
53  //set a uniform transition matrix
54  void SetUniformTransitions();
55  //set a transition matrix that stays in current state with probability
56  //1-pExit, transitions to a state picked uniformly at random otherwise
57  void SetUniformExitProbabilities(Real pExit);
58 
66  bool TrainEM(const std::vector<std::vector<Vector> >& examples,Real& tol,int maxIters,int verbose=0);
67  bool TrainDiagonalEM(const std::vector<std::vector<Vector> >& examples,Real& tol,int maxIters,int verbose=0);
68 
70  Real LogLikelihood(const std::vector<int>& dstates,const std::vector<Vector>& observations) const;
71  Real LogLikelihood(const std::vector<Vector>& observations) const;
72  Real Probability(const Vector& p0,const Vector& prevObs,const Vector& obs) const;
73 
76  void Predict(const Vector& p0,Vector& pt,int numsteps=1) const;
80  void Update(const Vector& p0,const Vector& prevObs,const Vector& obs,Vector& pobs) const;
84  void Filter(const Vector& p0,const Vector& prevObs,const Vector& obs,Vector& pnext) const;
87  void ObservationDistribution(const Vector& pt,const Vector& prevObs,GaussianMixtureModel& model) const;
89  void MAP(const std::vector<Vector>& observations,std::vector<int>& dstates) const;
92  void Posterior(const std::vector<Vector>& observations,std::vector<Vector>& pstate) const;
96  void Posterior(const std::vector<Vector>& observations,std::vector<Vector>& pstate,Matrix& tstate) const;
97 
98  Vector discretePrior;
99  Matrix transitionMatrix;
100  std::vector<Gaussian<Real> > continuousPriors;
101  std::vector<LinearProcess> emissionModels;
102 };
103 
104 std::ostream& operator << (std::ostream& out,const LinearProcessHMM& gmm);
105 std::istream& operator >> (std::istream& in,LinearProcessHMM& gmm);
106 
107 
109 {
110  public:
111  //collapses all state-dependent mixtures into at most k components
112  void CollapseByState(int k=1,bool refit=true);
113  //turns state-dependent mixtures into 1 state-independent mixture
114  //with at most k components
115  void CollapseToSingleState(int k=1,bool refit=true);
116  //collapses mixtures into ktotal total mixtures
117  void CollapseWeighted(int ktotal=1,bool refit=true);
118  //merges all state-dependent mixtures into one
119  void GetY(GaussianMixtureModelRaw& ycollapsed) const;
120  //merges all state-dependent mixtures into one
121  void GetY(Vector& ymean,Matrix& ycov) const;
122  //merges all state-dependent mixtures into one
123  void GetXY(GaussianMixtureModelRaw& xycollapsed) const;
124 
125  //after predict, xy is filled out and y is cleared
126  //after update, x and y are filled out and xy is cleared
127  Vector p;
128  Vector xPrev,x;
129  std::vector<GaussianMixtureModelRaw> y;
130  std::vector<GaussianMixtureModelRaw> xy;
131  const std::vector<int> *xindices, *yindices;
132 };
133 
135 {
136  public:
139  void SetXIndices(const std::vector<int>& xindices);
140  void GetInitial(LinearProcessHMMState& s0) const;
141  Real ProbabilityX(const LinearProcessHMMState& s,const Vector& x) const;
142  void Update(const LinearProcessHMMState& s,const Vector& x,LinearProcessHMMState& sobs) const;
143  void Predict(const LinearProcessHMMState& s0,LinearProcessHMMState& st) const;
144  void Predict(const LinearProcessHMMState& s0,int numsteps,LinearProcessHMMState& st,int kmax=-1) const;
145 
146  LinearProcessHMM joint;
147  std::vector<int> xindices,yindices;
148  std::vector<Gaussian<Real> > xPriors;
149  std::vector<LinearProcess> yPriors;
150  std::vector<LinearProcess> xRegressions;
151 };
152 
153 } //namespace Statistics
154 
155 #endif
A model of a temporal sequence consisting of k discrete states each with a gaussian emission probabil...
Definition: LinearProcessHMM.h:44
Contains all definitions in the statistics directory.
Definition: BernoulliDistribution.h:6
Definition: LinearProcessHMM.h:9
Definition: LinearProcessHMM.h:134
A more ``raw&#39;&#39; model of a GMM that does not perform a cholesky decomposiition.
Definition: GaussianMixtureModel.h:68
Definition: LinearProcessHMM.h:108
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
A model of a probability distribution consisting of k gaussians.
Definition: GaussianMixtureModel.h:15