[mlpack] 05/149: New distribution (a combination of LinearRegression and GaussianDistribution) for implementing HMM Regression.
Barak A. Pearlmutter
barak+git at pearlmutter.net
Sat May 2 09:11:03 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 7b41f59d6d5b66a055f7b58eedbc5d66983c74ec
Author: michaelfox99 <michaelfox99 at 9d5b8971-822b-0410-80eb-d18c1038ef23>
Date: Sat Sep 13 15:20:21 2014 +0000
New distribution (a combination of LinearRegression and GaussianDistribution) for implementing HMM Regression.
git-svn-id: http://svn.cc.gatech.edu/fastlab/mlpack/trunk@17178 9d5b8971-822b-0410-80eb-d18c1038ef23
---
src/mlpack/core/dists/hmm_regression.hpp | 89 ++++++++++++++++++++++++++++++++
1 file changed, 89 insertions(+)
diff --git a/src/mlpack/core/dists/hmm_regression.hpp b/src/mlpack/core/dists/hmm_regression.hpp
new file mode 100644
index 0000000..3b17cac
--- /dev/null
+++ b/src/mlpack/core/dists/hmm_regression.hpp
@@ -0,0 +1,89 @@
+/**
+ * @file hmm_regression.hpp
+ * @author Michael Fox
+ *
+ * Implementation of conditional Gaussian distribution for HMM regression (HMMR)
+ */
+#ifndef __MLPACK_METHODS_HMM_DISTRIBUTIONS_CONDITIONAL_GAUSSIAN_DISTRIBUTION_HPP
+#define __MLPACK_METHODS_HMM_DISTRIBUTIONS_CONDITIONAL_GAUSSIAN_DISTRIBUTION_HPP
+
+#include <mlpack/core.hpp>
+#include <mlpack/methods/linear_regression/linear_regression.hpp>
+
+namespace mlpack {
+namespace distribution {
+
+/**
+ * A class that represents a univariate conditionally Gaussian distribution.
+ * Can be used as an emission distribution with the hmm class to implement HMM
+ * regression (HMMR) as described in
+ * https://www.ima.umn.edu/preprints/January1994/1195.pdf
+ * The hmm observations should have the dependent variable in the first row,
+ * with the independent variables in the other rows.
+ */
+class HMMRegression
+{
+ private:
+ //! Regression function for representing conditional mean.
+ regression::LinearRegression rf;
+ //! Error distribution
+ GaussianDistribution err;
+
+ public:
+ /**
+ * Default constructor, which creates a Gaussian with zero dimension.
+ */
+ HMMRegression() { /* nothing to do */ }
+
+ /**
+ * Create a Conditional Gaussian distribution with conditional mean function
+ * obtained by running RegressionFunction on predictors, responses.
+ *
+ * @param predictors Matrix of predictors (X).
+ * @param responses Vector of responses (y).
+ */
+ HMMRegression(const arma::mat& predictors,
+ const arma::vec& responses) :
+ rf(regression::LinearRegression(predictors, responses))
+ {
+ err = GaussianDistribution(1);
+ err.Covariance() = rf.ComputeError(predictors, responses);
+ }
+
+ /**
+ * Returns a string representation of this object.
+ */
+ std::string ToString() const;
+
+ // Return regression function
+ const regression::LinearRegression& Rf() {return rf;}
+
+ /**
+ * Estimate parameters using provided observation weights
+ *
+ * @param weights probability that given observation is from distribution
+ */
+ void Estimate(const arma::mat& observations, const arma::vec& weights);
+
+ /**
+ * Evaluate probability density function of given observation
+ *
+ * @param observation point to evaluate probability at
+ */
+ double Probability(const arma::vec& observation) const;
+
+ //! Return the parameters (the b vector).
+ const arma::vec& Parameters() const { return rf.Parameters(); }
+
+ //! Return the dimensionality (2)
+ static const size_t Dimensionality() { return 2; }
+};
+
+
+}; // namespace distribution
+}; // namespace mlpack
+
+//Include implmentation
+#include "hmm_regression_impl.hpp"
+
+#endif
--
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