Skip to content

build_mhmm()

build_mhmm() creates an unfitted Mixture Hidden Markov Model (MHMM). Each cluster is its own HMM submodel; sequences are assumed to come from one cluster with unknown membership.

Function Usage

python
build_mhmm(
    observations,
    n_clusters,
    n_states,
    initial_probs=None,
    transition_probs=None,
    emission_probs=None,
    cluster_probs=None,
    cluster_names=None,
    state_names=None,
    channel_names=None,
    random_state=None
)

seqHMM Parameter Mapping

SequenzoseqHMM build_mhmm()
observationsSingle-channel stslist
n_clustersNumber of mixture components
n_statesHidden states per cluster (scalar or vector)
initial_probs, transition_probs, emission_probsLists of per-cluster matrices
cluster_probsMixture weights
cluster_names, state_namesLabels

Entry Parameters

ParameterRequiredTypeDescription
observationsSequenceDataSingle-channel sequence data (not a list).
n_clustersintNumber of clusters (HMM submodels).
n_statesint / List[int]Hidden states per cluster. Use an int for equal sizes, or a list of length n_clusters for different sizes.
initial_probsList[ndarray] / NonePer-cluster initial distributions.
transition_probsList[ndarray] / NonePer-cluster transition matrices.
emission_probsList[ndarray] / NonePer-cluster emission matrices.
cluster_probsndarray / NoneInitial mixture weights (n_clusters,). Uniform if omitted.
cluster_namesList[str] / NoneCluster labels.
state_namesList[List[str]] / NoneHidden state names per cluster.
channel_namesList[str] / NoneReserved for future multichannel support.
random_stateint / NoneSeed for random initialization.

What It Returns

An MHMM object containing:

  • clusters: list of unfitted HMM submodels
  • n_clusters, cluster_probs, observations
  • log_likelihood is None until fit_mhmm()

Example

python
from sequenzo.seqhmm import build_mhmm, fit_mhmm

# Step 1: build 3 clusters, 4 hidden states each
mhmm = build_mhmm(seq, n_clusters=3, n_states=4, random_state=42)

# Different state counts per cluster
mhmm = build_mhmm(seq, n_clusters=3, n_states=[4, 4, 6], random_state=42)

# Step 2: fit
mhmm = fit_mhmm(mhmm, n_iter=100, verbose=True)

R Counterpart

  • Closest R function: seqHMM build_mhmm()
  • Mapping note: R supports multichannel and covariate-dependent mixture weights; Sequenzo currently supports single-channel data without covariate formulas on build_mhmm().

Notes

Authors

Code: Yuqi Liang

Documentation: Yuqi Liang

References

Helske, S., & Helske, J. (2019). Mixture hidden Markov models for sequence data: The seqHMM package in R. Journal of Statistical Software, 88(3), 1–32.