hmmlearn¶
- Simple algorithms and models to learn HMMs (Hidden Markov Models) in Python,
- Follows scikit-learn API as close as possible, but adapted to sequence data,
- Built on scikit-learn, NumPy, SciPy, and matplotlib,
- Open source, commercially usable — BSD license.
User guide: table of contents¶
Tutorial¶
hmmlearn
implements the Hidden Markov Models (HMMs).
The HMM is a generative probabilistic model, in which a sequence of observable
\(\mathbf{X}\) variables is generated by a sequence of internal hidden
states \(\mathbf{Z}\). The hidden states are not be observed directly.
The transitions between hidden states are assumed to have the form of a
(first-order) Markov chain. They can be specified by the start probability
vector \(\boldsymbol{\pi}\) and a transition probability matrix
\(\mathbf{A}\). The emission probability of an observable can be any
distribution with parameters \(\boldsymbol{\theta}\) conditioned on the
current hidden state. The HMM is completely determined by
\(\boldsymbol{\pi}\), \(\mathbf{A}\) and \(\boldsymbol{\theta}\).
There are three fundamental problems for HMMs:
- Given the model parameters and observed data, estimate the optimal sequence of hidden states.
- Given the model parameters and observed data, calculate the likelihood of the data.
- Given just the observed data, estimate the model parameters.
The first and the second problem can be solved by the dynamic programming algorithms known as the Viterbi algorithm and the Forward-Backward algorithm, respectively. The last one can be solved by an iterative Expectation-Maximization (EM) algorithm, known as the Baum-Welch algorithm.
References:
[Rabiner89] | Lawrence R. Rabiner “A tutorial on hidden Markov models and selected applications in speech recognition”, Proceedings of the IEEE 77.2, pp. 257-286, 1989. |
[Bilmes98] | Jeff A. Bilmes, “A gentle tutorial of the EM algorithm and its application to parameter estimation for Gaussian mixture and hidden Markov models.”, 1998. |
Available models¶
hmm.GaussianHMM |
Hidden Markov Model with Gaussian emissions. |
hmm.GMMHMM |
Hidden Markov Model with Gaussian mixture emissions. |
hmm.MultinomialHMM |
Hidden Markov Model with multinomial (discrete) emissions |
Read on for details on how to implement an HMM with a custom emission probability.
Building HMM and generating samples¶
You can build an HMM instance by passing the parameters described above to the
constructor. Then, you can generate samples from the HMM by calling
sample
.
>>> import numpy as np
>>> from hmmlearn import hmm
>>> np.random.seed(42)
>>> model = hmm.GaussianHMM(n_components=3, covariance_type="full")
>>> model.startprob_ = np.array([0.6, 0.3, 0.1])
>>> model.transmat_ = np.array([[0.7, 0.2, 0.1],
... [0.3, 0.5, 0.2],
... [0.3, 0.3, 0.4]])
>>> model.means_ = np.array([[0.0, 0.0], [3.0, -3.0], [5.0, 10.0]])
>>> model.covars_ = np.tile(np.identity(2), (3, 1, 1))
>>> X, Z = model.sample(100)
The transition probability matrix need not to be ergodic. For instance, a left-right HMM can be defined as follows:
>>> lr = hmm.GaussianHMM(n_components=3, covariance_type="diag",
... init_params="cm", params="cmt")
>>> lr.startprob_ = np.array([1.0, 0.0, 0.0])
>>> lr.transmat_ = np.array([[0.5, 0.5, 0.0],
... [0.0, 0.5, 0.5],
... [0.0, 0.0, 1.0]])
If any of the required parameters are missing, sample
will raise an exception:
>>> hmm.GaussianHMM(n_components=3)
>>> X, Z = model.sample(100)
Traceback (most recent call last):
...
sklearn.utils.validation.NotFittedError: This GaussianHMM instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.
Fixing parameters
Each HMM parameter has a character code which can be used to customize its initialization and estimation. EM algorithm needs a starting point to proceed, thus prior to training each parameter is assigned a value either random or computed from the data. It is possible to hook into this process and provide a starting point explicitly. To do so
- ensure that the character code for the parameter is missing from
init_params
and then- set the parameter to the desired value.
For example, consider an HMM with explicitly initialized transition probability matrix
>>> model = hmm.GaussianHMM(n_components=3, n_iter=100, init_params="mcs")
>>> model.transmat_ = np.array([[0.7, 0.2, 0.1],
... [0.3, 0.5, 0.2],
... [0.3, 0.3, 0.4]])
A similar trick applies to parameter estimation. If you want to fix some
parameter at a specific value, remove the corresponding character from
params
and set the parameter value before training.
Examples:
Saving and loading HMM¶
After traning an HMM can be easily persisted for future use with the standard
pickle
module or its more efficient replacement in the joblib
package:
>>> from sklearn.externals import joblib
>>> joblib.dump(remodel, "filename.pkl")
["filename.pkl"]
>>> joblib.load("filename.pkl")
GaussianHMM(algorithm='viterbi',...
Implementing HMMs with custom emission probabilities¶
If you want to implement other emission probability (e.g. Poisson), you have to
subclass _BaseHMM
and override the following methods
base._BaseHMM._init (X, lengths) |
Initializes model parameters prior to fitting. |
base._BaseHMM._check () |
Validates model parameters prior to fitting. |
base._BaseHMM._generate_sample_from_state (state) |
Generates a random sample from a given component. |
base._BaseHMM._compute_log_likelihood (X) |
Computes per-component log probability under the model. |
base._BaseHMM._initialize_sufficient_statistics () |
Initializes sufficient statistics required for M-step. |
base._BaseHMM._accumulate_sufficient_statistics (...) |
Updates sufficient statistics from a given sample. |
base._BaseHMM._do_mstep (stats) |
Performs the M-step of EM algorithm. |
Examples¶
Sampling from HMM¶
This script shows how to sample points from a Hiden Markov Model (HMM): we use a 4-components with specified mean and covariance.
The plot show the sequence of observations generated with the transitions between them. We can see that, as specified by our transition matrix, there are no transition between component 1 and 3.
print(__doc__)
import numpy as np
import matplotlib.pyplot as plt
from hmmlearn import hmm
Prepare parameters for a 4-components HMM Initial population probability
startprob = np.array([0.6, 0.3, 0.1, 0.0])
# The transition matrix, note that there are no transitions possible
# between component 1 and 3
transmat = np.array([[0.7, 0.2, 0.0, 0.1],
[0.3, 0.5, 0.2, 0.0],
[0.0, 0.3, 0.5, 0.2],
[0.2, 0.0, 0.2, 0.6]])
# The means of each component
means = np.array([[0.0, 0.0],
[0.0, 11.0],
[9.0, 10.0],
[11.0, -1.0]])
# The covariance of each component
covars = .5 * np.tile(np.identity(2), (4, 1, 1))
# Build an HMM instance and set parameters
model = hmm.GaussianHMM(n_components=4, covariance_type="full")
# Instead of fitting it from the data, we directly set the estimated
# parameters, the means and covariance of the components
model.startprob_ = startprob
model.transmat_ = transmat
model.means_ = means
model.covars_ = covars
# Generate samples
X, Z = model.sample(500)
# Plot the sampled data
plt.plot(X[:, 0], X[:, 1], ".-", label="observations", ms=6,
mfc="orange", alpha=0.7)
# Indicate the component numbers
for i, m in enumerate(means):
plt.text(m[0], m[1], 'Component %i' % (i + 1),
size=17, horizontalalignment='center',
bbox=dict(alpha=.7, facecolor='w'))
plt.legend(loc='best')
plt.show()

Total running time of the script: (0 minutes 0.350 seconds)
plot_hmm_sampling.py
plot_hmm_sampling.ipynb
Gaussian HMM of stock data¶
This script shows how to use Gaussian HMM on stock price data from
Yahoo! finance. For more information on how to visualize stock prices
with matplotlib, please refer to date_demo1.py
of matplotlib.
from __future__ import print_function
import datetime
import numpy as np
from matplotlib import cm, pyplot as plt
from matplotlib.dates import YearLocator, MonthLocator
try:
from matplotlib.finance import quotes_historical_yahoo_ochl
except ImportError:
# For Matplotlib prior to 1.5.
from matplotlib.finance import (
quotes_historical_yahoo as quotes_historical_yahoo_ochl
)
from hmmlearn.hmm import GaussianHMM
print(__doc__)
Get quotes from Yahoo! finance
quotes = quotes_historical_yahoo_ochl(
"INTC", datetime.date(1995, 1, 1), datetime.date(2012, 1, 6))
# Unpack quotes
dates = np.array([q[0] for q in quotes], dtype=int)
close_v = np.array([q[2] for q in quotes])
volume = np.array([q[5] for q in quotes])[1:]
# Take diff of close value. Note that this makes
# ``len(diff) = len(close_t) - 1``, therefore, other quantities also
# need to be shifted by 1.
diff = np.diff(close_v)
dates = dates[1:]
close_v = close_v[1:]
# Pack diff and volume for training.
X = np.column_stack([diff, volume])
Run Gaussian HMM
print("fitting to HMM and decoding ...", end="")
# Make an HMM instance and execute fit
model = GaussianHMM(n_components=4, covariance_type="diag", n_iter=1000).fit(X)
# Predict the optimal sequence of internal hidden state
hidden_states = model.predict(X)
print("done")
Out:
fitting to HMM and decoding ...done
Print trained parameters and plot
print("Transition matrix")
print(model.transmat_)
print()
print("Means and vars of each hidden state")
for i in range(model.n_components):
print("{0}th hidden state".format(i))
print("mean = ", model.means_[i])
print("var = ", np.diag(model.covars_[i]))
print()
fig, axs = plt.subplots(model.n_components, sharex=True, sharey=True)
colours = cm.rainbow(np.linspace(0, 1, model.n_components))
for i, (ax, colour) in enumerate(zip(axs, colours)):
# Use fancy indexing to plot data in each state.
mask = hidden_states == i
ax.plot_date(dates[mask], close_v[mask], ".-", c=colour)
ax.set_title("{0}th hidden state".format(i))
# Format the ticks.
ax.xaxis.set_major_locator(YearLocator())
ax.xaxis.set_minor_locator(MonthLocator())
ax.grid(True)
plt.show()

Out:
Transition matrix
[[ 7.73505488e-01 1.21602143e-12 4.13525763e-02 1.85141936e-01]
[ 3.55338066e-15 9.79217702e-01 1.80611963e-02 2.72110180e-03]
[ 4.20116465e-01 1.18928463e-01 4.60955072e-01 1.91329669e-18]
[ 1.12652335e-01 3.25253603e-03 6.90794632e-04 8.83404334e-01]]
Means and vars of each hidden state
0th hidden state
mean = [ 2.19283455e-02 8.82098779e+07]
var = [ 1.26266869e-01 5.64899722e+14]
1th hidden state
mean = [ 2.40689227e-02 4.97390967e+07]
var = [ 7.42026137e-01 2.49469027e+14]
2th hidden state
mean = [ -3.64907452e-01 1.53097324e+08]
var = [ 2.72118688e+00 5.88892979e+15]
3th hidden state
mean = [ 7.93313395e-03 5.43199848e+07]
var = [ 5.34313422e-02 1.54645172e+14]
Total running time of the script: (0 minutes 2.219 seconds)
plot_hmm_stock_analysis.py
plot_hmm_stock_analysis.ipynb
API Reference¶
This is the class and function reference of hmmlearn
.
Please refer to the full user guide for further details, as the class and function raw specifications may not be enough to give full guidelines on their uses.
hmmlearn.base¶
ConvergenceMonitor¶
-
class
hmmlearn.base.
ConvergenceMonitor
(tol, n_iter, verbose)[source]¶ Monitors and reports convergence to
sys.stderr
.Parameters: tol : double
Convergence threshold. EM has converged either if the maximum number of iterations is reached or the log probability improvement between the two consecutive iterations is less than threshold.
n_iter : int
Maximum number of iterations to perform.
verbose : bool
If
True
then per-iteration convergence reports are printed, otherwise the monitor is mute.Attributes
history (deque) The log probability of the data for the last two training iterations. If the values are not strictly increasing, the model did not converge. iter (int) Number of iterations performed while training the model. -
converged
¶ True
if the EM algorithm converged andFalse
otherwise.
-
report
(logprob)[source]¶ Reports convergence to
sys.stderr
.The output consists of three columns: iteration number, log probability of the data at the current iteration and convergence rate. At the first iteration convergence rate is unknown and is thus denoted by NaN.
Parameters: logprob : float
The log probability of the data as computed by EM algorithm in the current iteration.
-
_BaseHMM¶
-
class
hmmlearn.base.
_BaseHMM
(n_components=1, startprob_prior=1.0, transmat_prior=1.0, algorithm='viterbi', random_state=None, n_iter=10, tol=0.01, verbose=False, params='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', init_params='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')[source]¶ Base class for Hidden Markov Models.
This class allows for easy evaluation of, sampling from, and maximum-likelihood estimation of the parameters of a HMM.
See the instance documentation for details specific to a particular object.
Parameters: n_components : int
Number of states in the model.
startprob_prior : array, shape (n_components, )
Initial state occupation prior distribution.
transmat_prior : array, shape (n_components, n_components)
Matrix of prior transition probabilities between states.
algorithm : string
Decoder algorithm. Must be one of “viterbi” or “map”. Defaults to “viterbi”.
random_state: RandomState or an int seed
A random number generator instance.
n_iter : int, optional
Maximum number of iterations to perform.
tol : float, optional
Convergence threshold. EM will stop if the gain in log-likelihood is below this value.
verbose : bool, optional
When
True
per-iteration convergence reports are printed tosys.stderr
. You can diagnose convergence via themonitor_
attribute.params : string, optional
Controls which parameters are updated in the training process. Can contain any combination of ‘s’ for startprob, ‘t’ for transmat, and other characters for subclass-specific emission parameters. Defaults to all parameters.
init_params : string, optional
Controls which parameters are initialized prior to training. Can contain any combination of ‘s’ for startprob, ‘t’ for transmat, and other characters for subclass-specific emission parameters. Defaults to all parameters.
Attributes
monitor_ (ConvergenceMonitor) Monitor object used to check the convergence of EM. startprob_ (array, shape (n_components, )) Initial state occupation distribution. transmat_ (array, shape (n_components, n_components)) Matrix of transition probabilities between states. -
_accumulate_sufficient_statistics
(stats, X, framelogprob, posteriors, fwdlattice, bwdlattice)[source]¶ Updates sufficient statistics from a given sample.
Parameters: stats : dict
Sufficient statistics as returned by
_initialize_sufficient_statistics
.X : array, shape (n_samples, n_features)
Sample sequence.
framelogprob : array, shape (n_samples, n_components)
Log-probabilities of each sample under each of the model states.
posteriors : array, shape (n_samples, n_components)
Posterior probabilities of each sample being generated by each of the model states.
fwdlattice, bwdlattice : array, shape (n_samples, n_components)
Log-forward and log-backward probabilities.
-
_check
()[source]¶ Validates model parameters prior to fitting.
Raises: ValueError
If any of the parameters are invalid, e.g. if
startprob_
don’t sum to 1.
-
_compute_log_likelihood
(X)[source]¶ Computes per-component log probability under the model.
Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
Returns: logprob : array, shape (n_samples, n_components)
Log probability of each sample in
X
for each of the model states.
-
_do_mstep
(stats)[source]¶ Performs the M-step of EM algorithm.
Parameters: stats : dict
Sufficient statistics updated from all available samples.
-
_generate_sample_from_state
(state, random_state=None)[source]¶ Generates a random sample from a given component.
Parameters: state : int
Index of the component to condition on.
random_state: RandomState or an int seed
A random number generator instance. If
None
, the object’srandom_state
is used.Returns: X : array, shape (n_features, )
A random sample from the emission distribution corresponding to a given component.
-
_init
(X, lengths)[source]¶ Initializes model parameters prior to fitting.
Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, )
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.
-
_initialize_sufficient_statistics
()[source]¶ Initializes sufficient statistics required for M-step.
The method is pure, meaning that it doesn’t change the state of the instance. For extensibility computed statistics are stored in a dictionary.
Returns: nobs : int
Number of samples in the data.
start : array, shape (n_components, )
An array where the i-th element corresponds to the posterior probability of the first sample being generated by the i-th state.
trans : array, shape (n_components, n_components)
An array where the (i, j)-th element corresponds to the posterior probability of transitioning between the i-th to j-th states.
-
decode
(X, lengths=None, algorithm=None)[source]¶ Find most likely state sequence corresponding to
X
.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.algorithm : string
Decoder algorithm. Must be one of “viterbi” or “map”. If not given,
decoder
is used.Returns: logprob : float
Log probability of the produced state sequence.
state_sequence : array, shape (n_samples, )
Labels for each sample from
X
obtained via a given decoderalgorithm
.See also
score_samples
- Compute the log probability under the model and posteriors.
score
- Compute the log probability under the model.
-
fit
(X, lengths=None)[source]¶ Estimate model parameters.
An initialization step is performed before entering the EM algorithm. If you want to avoid this step for a subset of the parameters, pass proper
init_params
keyword argument to estimator’s constructor.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, )
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: self : object
Returns self.
-
predict
(X, lengths=None)[source]¶ Find most likely state sequence corresponding to
X
.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: state_sequence : array, shape (n_samples, )
Labels for each sample from
X
.
-
predict_proba
(X, lengths=None)[source]¶ Compute the posterior probability for each state in the model.
- X : array-like, shape (n_samples, n_features)
- Feature matrix of individual samples.
- lengths : array-like of integers, shape (n_sequences, ), optional
- Lengths of the individual sequences in
X
. The sum of these should ben_samples
.
Returns: posteriors : array, shape (n_samples, n_components)
State-membership probabilities for each sample from
X
.
-
sample
(n_samples=1, random_state=None)[source]¶ Generate random samples from the model.
Parameters: n_samples : int
Number of samples to generate.
random_state : RandomState or an int seed
A random number generator instance. If
None
, the object’srandom_state
is used.Returns: X : array, shape (n_samples, n_features)
Feature matrix.
state_sequence : array, shape (n_samples, )
State sequence produced by the model.
-
score
(X, lengths=None)[source]¶ Compute the log probability under the model.
Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: logprob : float
Log likelihood of
X
.See also
score_samples
- Compute the log probability under the model and posteriors.
decode
- Find most likely state sequence corresponding to
X
.
-
score_samples
(X, lengths=None)[source]¶ Compute the log probability under the model and compute posteriors.
Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: logprob : float
Log likelihood of
X
.posteriors : array, shape (n_samples, n_components)
State-membership probabilities for each sample in
X
.See also
score
- Compute the log probability under the model.
decode
- Find most likely state sequence corresponding to
X
.
-
hmmlearn.hmm¶
GaussianHMM¶
-
class
hmmlearn.hmm.
GaussianHMM
(n_components=1, covariance_type='diag', min_covar=0.001, startprob_prior=1.0, transmat_prior=1.0, means_prior=0, means_weight=0, covars_prior=0.01, covars_weight=1, algorithm='viterbi', random_state=None, n_iter=10, tol=0.01, verbose=False, params='stmc', init_params='stmc')[source]¶ Hidden Markov Model with Gaussian emissions.
Parameters: n_components : int
Number of states.
covariance_type : string
String describing the type of covariance parameters to use. Must be one of
- “spherical” — each state uses a single variance value that applies to all features;
- “diag” — each state uses a diagonal covariance matrix;
- “full” — each state uses a full (i.e. unrestricted) covariance matrix;
- “tied” — all states use the same full covariance matrix.
Defaults to “diag”.
min_covar : float
Floor on the diagonal of the covariance matrix to prevent overfitting. Defaults to 1e-3.
startprob_prior : array, shape (n_components, )
Initial state occupation prior distribution.
transmat_prior : array, shape (n_components, n_components)
Matrix of prior transition probabilities between states.
algorithm : string
Decoder algorithm. Must be one of “viterbi” or “map”. Defaults to “viterbi”.
random_state: RandomState or an int seed
A random number generator instance.
n_iter : int, optional
Maximum number of iterations to perform.
tol : float, optional
Convergence threshold. EM will stop if the gain in log-likelihood is below this value.
verbose : bool, optional
When
True
per-iteration convergence reports are printed tosys.stderr
. You can diagnose convergence via themonitor_
attribute.params : string, optional
Controls which parameters are updated in the training process. Can contain any combination of ‘s’ for startprob, ‘t’ for transmat, ‘m’ for means and ‘c’ for covars. Defaults to all parameters.
init_params : string, optional
Controls which parameters are initialized prior to training. Can contain any combination of ‘s’ for startprob, ‘t’ for transmat, ‘m’ for means and ‘c’ for covars. Defaults to all parameters.
Examples
>>> from hmmlearn.hmm import GaussianHMM >>> GaussianHMM(n_components=2) ... GaussianHMM(algorithm='viterbi',...
Attributes
n_features (int) Dimensionality of the Gaussian emissions. monitor_ (ConvergenceMonitor) Monitor object used to check the convergence of EM. transmat_ (array, shape (n_components, n_components)) Matrix of transition probabilities between states. startprob_ (array, shape (n_components, )) Initial state occupation distribution. means_ (array, shape (n_components, n_features)) Mean parameters for each state. covars_ (array) Covariance parameters for each state. The shape depends on covariance_type
:: (n_components, ) if ‘spherical’, (n_features, n_features) if ‘tied’, (n_components, n_features) if ‘diag’, (n_components, n_features, n_features) if ‘full’-
decode
(X, lengths=None, algorithm=None)[source]¶ Find most likely state sequence corresponding to
X
.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.algorithm : string
Decoder algorithm. Must be one of “viterbi” or “map”. If not given,
decoder
is used.Returns: logprob : float
Log probability of the produced state sequence.
state_sequence : array, shape (n_samples, )
Labels for each sample from
X
obtained via a given decoderalgorithm
.See also
score_samples
- Compute the log probability under the model and posteriors.
score
- Compute the log probability under the model.
-
fit
(X, lengths=None)[source]¶ Estimate model parameters.
An initialization step is performed before entering the EM algorithm. If you want to avoid this step for a subset of the parameters, pass proper
init_params
keyword argument to estimator’s constructor.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, )
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: self : object
Returns self.
-
predict
(X, lengths=None)[source]¶ Find most likely state sequence corresponding to
X
.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: state_sequence : array, shape (n_samples, )
Labels for each sample from
X
.
-
predict_proba
(X, lengths=None)[source]¶ Compute the posterior probability for each state in the model.
- X : array-like, shape (n_samples, n_features)
- Feature matrix of individual samples.
- lengths : array-like of integers, shape (n_sequences, ), optional
- Lengths of the individual sequences in
X
. The sum of these should ben_samples
.
Returns: posteriors : array, shape (n_samples, n_components)
State-membership probabilities for each sample from
X
.
-
sample
(n_samples=1, random_state=None)[source]¶ Generate random samples from the model.
Parameters: n_samples : int
Number of samples to generate.
random_state : RandomState or an int seed
A random number generator instance. If
None
, the object’srandom_state
is used.Returns: X : array, shape (n_samples, n_features)
Feature matrix.
state_sequence : array, shape (n_samples, )
State sequence produced by the model.
-
score
(X, lengths=None)[source]¶ Compute the log probability under the model.
Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: logprob : float
Log likelihood of
X
.See also
score_samples
- Compute the log probability under the model and posteriors.
decode
- Find most likely state sequence corresponding to
X
.
-
score_samples
(X, lengths=None)[source]¶ Compute the log probability under the model and compute posteriors.
Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: logprob : float
Log likelihood of
X
.posteriors : array, shape (n_samples, n_components)
State-membership probabilities for each sample in
X
.See also
score
- Compute the log probability under the model.
decode
- Find most likely state sequence corresponding to
X
.
GMMHMM¶
-
class
hmmlearn.hmm.
GMMHMM
(n_components=1, n_mix=1, startprob_prior=1.0, transmat_prior=1.0, covariance_type='diag', covars_prior=0.01, algorithm='viterbi', random_state=None, n_iter=10, tol=0.01, verbose=False, params='stmcw', init_params='stmcw')[source]¶ Hidden Markov Model with Gaussian mixture emissions.
Parameters: n_components : int
Number of states in the model.
n_mix : int
Number of states in the GMM.
covariance_type : string
String describing the type of covariance parameters to use. Must be one of
- “spherical” — each state uses a single variance value that applies to all features;
- “diag” — each state uses a diagonal covariance matrix;
- “full” — each state uses a full (i.e. unrestricted) covariance matrix;
- “tied” — all states use the same full covariance matrix.
Defaults to “diag”.
startprob_prior : array, shape (n_components, )
Initial state occupation prior distribution.
transmat_prior : array, shape (n_components, n_components)
Matrix of prior transition probabilities between states.
algorithm : string
Decoder algorithm. Must be one of “viterbi” or “map”. Defaults to “viterbi”.
random_state: RandomState or an int seed
A random number generator instance.
n_iter : int, optional
Maximum number of iterations to perform.
tol : float, optional
Convergence threshold. EM will stop if the gain in log-likelihood is below this value.
verbose : bool, optional
When
True
per-iteration convergence reports are printed tosys.stderr
. You can diagnose convergence via themonitor_
attribute.init_params : string, optional
Controls which parameters are initialized prior to training. Can contain any combination of ‘s’ for startprob, ‘t’ for transmat, ‘m’ for means, ‘c’ for covars, and ‘w’ for GMM mixing weights. Defaults to all parameters.
params : string, optional
Controls which parameters are updated in the training process. Can contain any combination of ‘s’ for startprob, ‘t’ for transmat, ‘m’ for means, and ‘c’ for covars, and ‘w’ for GMM mixing weights. Defaults to all parameters.
Examples
>>> from hmmlearn.hmm import GMMHMM >>> GMMHMM(n_components=2, n_mix=10, covariance_type='diag') ... GMMHMM(algorithm='viterbi', covariance_type='diag',...
Attributes
monitor_ (ConvergenceMonitor) Monitor object used to check the convergence of EM. startprob_ (array, shape (n_components, )) Initial state occupation distribution. transmat_ (array, shape (n_components, n_components)) Matrix of transition probabilities between states. gmms_ (list of GMM objects, length n_components) GMM emission distributions for each state. -
decode
(X, lengths=None, algorithm=None)[source]¶ Find most likely state sequence corresponding to
X
.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.algorithm : string
Decoder algorithm. Must be one of “viterbi” or “map”. If not given,
decoder
is used.Returns: logprob : float
Log probability of the produced state sequence.
state_sequence : array, shape (n_samples, )
Labels for each sample from
X
obtained via a given decoderalgorithm
.See also
score_samples
- Compute the log probability under the model and posteriors.
score
- Compute the log probability under the model.
-
fit
(X, lengths=None)[source]¶ Estimate model parameters.
An initialization step is performed before entering the EM algorithm. If you want to avoid this step for a subset of the parameters, pass proper
init_params
keyword argument to estimator’s constructor.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, )
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: self : object
Returns self.
-
predict
(X, lengths=None)[source]¶ Find most likely state sequence corresponding to
X
.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: state_sequence : array, shape (n_samples, )
Labels for each sample from
X
.
-
predict_proba
(X, lengths=None)[source]¶ Compute the posterior probability for each state in the model.
- X : array-like, shape (n_samples, n_features)
- Feature matrix of individual samples.
- lengths : array-like of integers, shape (n_sequences, ), optional
- Lengths of the individual sequences in
X
. The sum of these should ben_samples
.
Returns: posteriors : array, shape (n_samples, n_components)
State-membership probabilities for each sample from
X
.
-
sample
(n_samples=1, random_state=None)[source]¶ Generate random samples from the model.
Parameters: n_samples : int
Number of samples to generate.
random_state : RandomState or an int seed
A random number generator instance. If
None
, the object’srandom_state
is used.Returns: X : array, shape (n_samples, n_features)
Feature matrix.
state_sequence : array, shape (n_samples, )
State sequence produced by the model.
-
score
(X, lengths=None)[source]¶ Compute the log probability under the model.
Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: logprob : float
Log likelihood of
X
.See also
score_samples
- Compute the log probability under the model and posteriors.
decode
- Find most likely state sequence corresponding to
X
.
-
score_samples
(X, lengths=None)[source]¶ Compute the log probability under the model and compute posteriors.
Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: logprob : float
Log likelihood of
X
.posteriors : array, shape (n_samples, n_components)
State-membership probabilities for each sample in
X
.See also
score
- Compute the log probability under the model.
decode
- Find most likely state sequence corresponding to
X
.
MultinomialHMM¶
-
class
hmmlearn.hmm.
MultinomialHMM
(n_components=1, startprob_prior=1.0, transmat_prior=1.0, algorithm='viterbi', random_state=None, n_iter=10, tol=0.01, verbose=False, params='ste', init_params='ste')[source]¶ Hidden Markov Model with multinomial (discrete) emissions
Parameters: n_components : int
Number of states.
startprob_prior : array, shape (n_components, )
Initial state occupation prior distribution.
transmat_prior : array, shape (n_components, n_components)
Matrix of prior transition probabilities between states.
algorithm : string
Decoder algorithm. Must be one of “viterbi” or “map”. Defaults to “viterbi”.
random_state: RandomState or an int seed
A random number generator instance.
n_iter : int, optional
Maximum number of iterations to perform.
tol : float, optional
Convergence threshold. EM will stop if the gain in log-likelihood is below this value.
verbose : bool, optional
When
True
per-iteration convergence reports are printed tosys.stderr
. You can diagnose convergence via themonitor_
attribute.params : string, optional
Controls which parameters are updated in the training process. Can contain any combination of ‘s’ for startprob, ‘t’ for transmat, ‘e’ for emissionprob. Defaults to all parameters.
init_params : string, optional
Controls which parameters are initialized prior to training. Can contain any combination of ‘s’ for startprob, ‘t’ for transmat, ‘e’ for emissionprob. Defaults to all parameters.
Examples
>>> from hmmlearn.hmm import MultinomialHMM >>> MultinomialHMM(n_components=2) ... MultinomialHMM(algorithm='viterbi',...
Attributes
n_features (int) Number of possible symbols emitted by the model (in the samples). monitor_ (ConvergenceMonitor) Monitor object used to check the convergence of EM. transmat_ (array, shape (n_components, n_components)) Matrix of transition probabilities between states. startprob_ (array, shape (n_components, )) Initial state occupation distribution. emissionprob_ (array, shape (n_components, n_features)) Probability of emitting a given symbol when in each state. -
decode
(X, lengths=None, algorithm=None)[source]¶ Find most likely state sequence corresponding to
X
.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.algorithm : string
Decoder algorithm. Must be one of “viterbi” or “map”. If not given,
decoder
is used.Returns: logprob : float
Log probability of the produced state sequence.
state_sequence : array, shape (n_samples, )
Labels for each sample from
X
obtained via a given decoderalgorithm
.See also
score_samples
- Compute the log probability under the model and posteriors.
score
- Compute the log probability under the model.
-
fit
(X, lengths=None)[source]¶ Estimate model parameters.
An initialization step is performed before entering the EM algorithm. If you want to avoid this step for a subset of the parameters, pass proper
init_params
keyword argument to estimator’s constructor.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, )
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: self : object
Returns self.
-
predict
(X, lengths=None)[source]¶ Find most likely state sequence corresponding to
X
.Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: state_sequence : array, shape (n_samples, )
Labels for each sample from
X
.
-
predict_proba
(X, lengths=None)[source]¶ Compute the posterior probability for each state in the model.
- X : array-like, shape (n_samples, n_features)
- Feature matrix of individual samples.
- lengths : array-like of integers, shape (n_sequences, ), optional
- Lengths of the individual sequences in
X
. The sum of these should ben_samples
.
Returns: posteriors : array, shape (n_samples, n_components)
State-membership probabilities for each sample from
X
.
-
sample
(n_samples=1, random_state=None)[source]¶ Generate random samples from the model.
Parameters: n_samples : int
Number of samples to generate.
random_state : RandomState or an int seed
A random number generator instance. If
None
, the object’srandom_state
is used.Returns: X : array, shape (n_samples, n_features)
Feature matrix.
state_sequence : array, shape (n_samples, )
State sequence produced by the model.
-
score
(X, lengths=None)[source]¶ Compute the log probability under the model.
Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: logprob : float
Log likelihood of
X
.See also
score_samples
- Compute the log probability under the model and posteriors.
decode
- Find most likely state sequence corresponding to
X
.
-
score_samples
(X, lengths=None)[source]¶ Compute the log probability under the model and compute posteriors.
Parameters: X : array-like, shape (n_samples, n_features)
Feature matrix of individual samples.
lengths : array-like of integers, shape (n_sequences, ), optional
Lengths of the individual sequences in
X
. The sum of these should ben_samples
.Returns: logprob : float
Log likelihood of
X
.posteriors : array, shape (n_samples, n_components)
State-membership probabilities for each sample in
X
.See also
score
- Compute the log probability under the model.
decode
- Find most likely state sequence corresponding to
X
.
-
hmmlearn Changelog¶
Here you can see the full list of changes between each hmmlearn release.
Version 0.2.0¶
Relased on March 1st, 2016
The release contains a known bug: fitting GMMHMM
with covariance
types other than "diag"
does not work. This is going to be fixed
in the following version. See issue #78 on GitHub for details.
- Removed deprecated re-exports from
hmmlean.hmm
. - Speed up forward-backward algorithms and Viterbi decoding by using Cython typed memoryviews. Thanks to @cfarrow. See PR#82 on GitHub.
- Changed the API to accept multiple sequences via a single feature matrix
X
and an array of sequencelengths
. This allowed to use the HMMs as part of scikit-learnPipeline
. The idea was shamelessly plugged fromseqlearn
package by @larsmans. See issue #29 on GitHub. - Removed
params
andinit_params
from internal methods. Accepting these as arguments was redundant and confusing, because both available as instance attributes. - Implemented
ConvergenceMonitor
, a class for convergence diagnostics. The idea is due to @mvictor212. - Added support for non-fully connected architectures, e.g. left-right HMMs. Thanks to @matthiasplappert. See issue #33 and PR #38 on GitHub.
- Fixed normalization of emission probabilities in
MultinomialHMM
, see issue #19 on GitHub. GaussianHMM
is now initialized from all observations, see issue #1 on GitHub.- Changed the models to do input validation lazily as suggested by the scikit-learn guidelines.
- Added
min_covar
parameter for controlling overfitting ofGaussianHMM
, see issue #2 on GitHub. - Accelerated M-step fro GaussianHMM with full and tied covariances. See PR #97 on GitHub. Thanks to @anntzer.
- Fixed M-step for
GMMHMM
, which incorrectly expecedGMM.score_samples
to return log-probabilities. See PR #4 on GitHub for discussion. Thanks to @mvictor212 and @michcio1234.
Version 0.1.1¶
Initial release, released on February 9th 2015