[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