[mlpack] 56/149: Added Smooth and Filter functions

Barak A. Pearlmutter barak+git at pearlmutter.net
Sat May 2 09:11:09 UTC 2015


This is an automated email from the git hooks/post-receive script.

bap pushed a commit to branch svn-trunk
in repository mlpack.

commit 440022b918c63a7dcc3fce6eda65576d6c70740c
Author: michaelfox99 <michaelfox99 at 9d5b8971-822b-0410-80eb-d18c1038ef23>
Date:   Sun Nov 2 17:45:22 2014 +0000

    Added Smooth and Filter functions
    
    
    git-svn-id: http://svn.cc.gatech.edu/fastlab/mlpack/trunk@17276 9d5b8971-822b-0410-80eb-d18c1038ef23
---
 src/mlpack/methods/hmm/hmm_impl.hpp | 47 +++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/src/mlpack/methods/hmm/hmm_impl.hpp b/src/mlpack/methods/hmm/hmm_impl.hpp
index 8d70346..8e45479 100644
--- a/src/mlpack/methods/hmm/hmm_impl.hpp
+++ b/src/mlpack/methods/hmm/hmm_impl.hpp
@@ -436,6 +436,53 @@ double HMM<Distribution>::LogLikelihood(const arma::mat& dataSeq) const
 }
 
 /**
+ * HMM filtering.
+ */
+template<typename Distribution>
+void HMM<Distribution>::Filter(const arma::mat& dataSeq,
+                               arma::mat& filterSeq,
+                               size_t ahead) const
+{
+  // First run the forward algorithm
+  arma::mat forwardProb;
+  arma::vec scales;
+  Forward(dataSeq, scales, forwardProb);
+  
+  // Propagate state ahead
+  if(ahead != 0) {
+    forwardProb = pow(transition, ahead)*forwardProb;
+  }
+  
+  // Compute expected emissions.
+  // Will not work for distributions without a Mean() function.
+  filterSeq.zeros(dimensionality, dataSeq.n_cols);
+  for(size_t i = 0; i < emission.size(); i++)
+  {
+    filterSeq = filterSeq + (emission[i].Mean())*(forwardProb.row(i));
+  }
+}
+
+/**
+ * HMM smoothing.
+ */
+template<typename Distribution>
+void HMM<Distribution>::Smooth(const arma::mat& dataSeq,
+                               arma::mat& smoothSeq) const
+{
+  // First run the forward algorithm
+  arma::mat stateProb;
+  Estimate(dataSeq, stateProb);
+  
+  // Compute expected emissions.
+  // Will not work for distributions without a Mean() function.
+  smoothSeq.zeros(dimensionality, dataSeq.n_cols);
+  for(size_t i = 0; i < emission.size(); i++)
+  {
+    smoothSeq = smoothSeq + (emission[i].Mean())*(stateProb.row(i));
+  }
+}
+
+/**
  * The Forward procedure (part of the Forward-Backward algorithm).
  */
 template<typename Distribution>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/mlpack.git



More information about the debian-science-commits mailing list