MLPACK  1.0.11
hmm.hpp
Go to the documentation of this file.
1 
23 #ifndef __MLPACK_METHODS_HMM_HMM_HPP
24 #define __MLPACK_METHODS_HMM_HMM_HPP
25 
26 #include <mlpack/core.hpp>
27 
28 namespace mlpack {
29 namespace hmm {
30 
92 template<typename Distribution = distribution::DiscreteDistribution>
93 class HMM
94 {
95  public:
113  HMM(const size_t states,
114  const Distribution emissions,
115  const double tolerance = 1e-5);
116 
144  HMM(const arma::vec& initial,
145  const arma::mat& transition,
146  const std::vector<Distribution>& emission,
147  const double tolerance = 1e-5);
148 
177  void Train(const std::vector<arma::mat>& dataSeq);
178 
200  void Train(const std::vector<arma::mat>& dataSeq,
201  const std::vector<arma::Col<size_t> >& stateSeq);
202 
221  double Estimate(const arma::mat& dataSeq,
222  arma::mat& stateProb,
223  arma::mat& forwardProb,
224  arma::mat& backwardProb,
225  arma::vec& scales) const;
226 
238  double Estimate(const arma::mat& dataSeq,
239  arma::mat& stateProb) const;
240 
252  void Generate(const size_t length,
253  arma::mat& dataSequence,
254  arma::Col<size_t>& stateSequence,
255  const size_t startState = 0) const;
256 
267  double Predict(const arma::mat& dataSeq,
268  arma::Col<size_t>& stateSeq) const;
269 
276  double LogLikelihood(const arma::mat& dataSeq) const;
277 
279  const arma::vec& Initial() const { return initial; }
281  arma::vec& Initial() { return initial; }
282 
284  const arma::mat& Transition() const { return transition; }
286  arma::mat& Transition() { return transition; }
287 
289  const std::vector<Distribution>& Emission() const { return emission; }
291  std::vector<Distribution>& Emission() { return emission; }
292 
294  size_t Dimensionality() const { return dimensionality; }
296  size_t& Dimensionality() { return dimensionality; }
297 
299  double Tolerance() const { return tolerance; }
301  double& Tolerance() { return tolerance; }
302 
306  std::string ToString() const;
307 
308  private:
309  // Helper functions.
310 
321  void Forward(const arma::mat& dataSeq,
322  arma::vec& scales,
323  arma::mat& forwardProb) const;
324 
336  void Backward(const arma::mat& dataSeq,
337  const arma::vec& scales,
338  arma::mat& backwardProb) const;
339 
341  arma::vec initial;
342 
344  arma::mat transition;
345 
347  std::vector<Distribution> emission;
348 
351 
353  double tolerance;
354 };
355 
356 }; // namespace hmm
357 }; // namespace mlpack
358 
359 // Include implementation.
360 #include "hmm_impl.hpp"
361 
362 #endif