AntoinePassemiers / ArchMM

A Cython Machine Learning library dedicated to Hidden Markov Models

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build status Code analysis

ArchMM

Flexible and efficient library for designing Hidden Markov Models using arbitrary topologies and underlying statistical distributions.

from archmm import HMM, HiddenState, Architecture
from archmm.distributions import MultivariateGaussian

# Create a HMM with 3 fully-connected hidden states
# and 4-dimensional multivariate Gaussian distributions
model = HMM()
states = [HiddenState(MultivariateGaussian(4)) for _ in range(3)]
Architecture.ergodic(states)  # Fully-connected
model.add_states(states)

# Train the model with the Baum-Welch algorithm.
# `sequences` is either a NumPy array or a list of NumPy arrays.
# If a list, elements are treated as different sequences.
# Arrays can have arbitrary dimensions, as long as it complies
# with the support of the distributions. In the present case,
# arrays have shape (n, 4), and n is sequence-dependent.
model.fit(sequences)

# Decode sequences with Viterbi algorithm
print(model.decode(sequences))

# Compute log-likelihood
print(model.score(sequences))

# Generate random sequence from trained model
print(model.sample(15))

Custom distributions can be defined as hidden states. More examples can be found in the examples folder.

Install the library

Please make sure you have Cython installed first. Then you can build the library simply with:

python setup.py install

Ongoing work

  • Improved initialization
  • NaN support
  • Input-Output HMM
  • MRF, etc.

About

A Cython Machine Learning library dedicated to Hidden Markov Models

License:MIT License


Languages

Language:Python 59.1%Language:Cython 40.1%Language:Makefile 0.8%