Numerically optimized time-series and sequence modelling in Python.
- Hidden Markov Models and Quasi-Deterministic Hidden Markov Models
- Numerically stable: floating point arithmetic performed in log space to avoid underflow
- Easy to use (based on the scikit-learn API)
- Pure Python and Numpy based
- Open source and commercially usable (BSD license)
- Support for discrete and continuous (Gaussian) emissions
The easiest way to install sequence-modelling is using pip:
pip install sequence-modelling
import numpy as np
from sequence_modelling.emmissions import Gaussian
from sequence_modelling.hmm import StandardHMM
import sequence_modelling.hmmviz as plt
# define a 2-state HMM estimator with one-dimensional Gaussian emissions
# the transition matrix
A = np.array([[0.6, 0.4],
[0.3, 0.7],
[0.5, 0.5]])
# the emission object
O = Gaussian(mu=np.array([[-100.0, 100.0]]),
covar=np.array([[[10.0]], [[10.0]]]))
# build the HMM model object
hmm = StandardHMM(A, O)
# sample 100 observations from the generative model
obs, path = hmm.sample(dim=1, N=100)
# fit the model to the data
likelihood, ll, duration, rankn, res = hmm.fit([obs])
# decode (predict) the most likely state sequence using the Viterbi algorithm
decoded_path = hmm.viterbi(obs)
# visualize the decoded state sequence
from matplotlib.pyplot import figure, show
fa = figure()
plt.view_viterbi(fa.add_subplot(1, 1, 1), [obs], [decoded_path], hmm.O.mu, seq=0)
fa.tight_layout()
show()