Factorial Hidden Markov Model (F-HMM)
Contents
Factorial HMM Models
- class ssm.factorial_hmm.base.FactorialHMM(num_states, initial_condition, transitions, emissions)
Factorial HMM base class.
The model consists of
discrete latent states
. The
-th state takes values
.
- Parameters
num_states (tuple or list) – number of discrete latent states per group
initial_condition (FactorialInitialCondition) – factorial initial state object
transitions (FactorialTransitions) – factorial transitions object
emissions (FactorialEmissions) – factorial emissions object
- initialize(data, covariates=None, metadata=None, key=None, method='kmeans')
Initialize the model parameters by performing an M-step with state assignments determined by the specified method (random or kmeans).
- Parameters
key (jr.PRNGKey) – random seed
data (np.ndarray) – array of observed data of shape
covariates (PyTree, optional) – optional covariates with leaf shape (B, T, …). Defaults to None.
metadata (PyTree, optional) – optional metadata with leaf shape (B, …). Defaults to None.
method (str, optional) – state assignment method. One of “random” or “kmeans”. Defaults to “kmeans”.
- Raises
ValueError – when initialize method is not recognized
- Return type
None
- class ssm.factorial_hmm.models.NormalFactorialHMM(num_states, initial_probs=None, transition_matrices=None, emission_means=None, emission_variance=0.0001, seed=None)
Factorial HMM with scalar Gaussian emissions.
The model consists of
discrete latent states
. The
-th state takes values
.
The emission mean is a sum of means associated with each group,
For example, the emissions may be measurements from a home’s power meter and the groups may correspond to appliances, which may be either on or off (
). If off, the appliance contributes nothing to the measurement (
), but if on, the appliance contributes
.
- Parameters
num_states (tuple or list) – number of discrete latent states per group
initial_state_probs (np.ndarray, optional) – initial state probabilities with shape
. Defaults to None.
transitions (Transitions, optional) – object specifying transitions Defaults to None. If specified, then transition_matrix is ignored.
transition_matrix (np.ndarray, optional) – transition matrix with shape
. Defaults to None. Only used if transitions is None.
emission_means (np.ndarray, optional) – specifies emission means with shape
. Defaults to None.
emission_covariances (np.ndarray, optional) – specifies emissions covariances with shape
. Defaults to None.
seed (jr.PRNGKey, optional) – random seed. Defaults to None.
initial_probs (tuple) –
transition_matrices (tuple) –
emission_variance (float) –
Factorial HMM Components
Factorial HMM Initials
- class ssm.factorial_hmm.initial.FactorialInitialCondition(initial_probs=None, initial_condition_objects=None)
Initial distribution for several indpendent discrete states.
- Parameters
initial_probs (tuple or list) –
initial_condition_objects (tuple or list) –
- log_initial_probs(data, covariates=None, metadata=None)
Return [log Pr(z_1 = k) for k in range(num_states)]
- distribution(covariates=None, metadata=None)
Return the distribution of z_1.
- Parameters
covariates (PyTree, optional) – optional covariates with leaf shape (B, T, …). Defaults to None.
metadata (PyTree, optional) – optional metadata with leaf shape (B, …). Defaults to None.
- Returns
distribution (tfd.Distribution) – distribution of z_1
- m_step(data, posterior, covariates=None, metadata=None)
Update the initial distribution in an M step given posteriors over the latent states.
- Parameters
dataset (np.ndarray) – the observed dataset with shape (B, T, D)
posteriors (HMMPosterior) – posteriors over the latent states with leaf shape (B, …)
covariates (PyTree, optional) – optional covariates with leaf shape (B, T, …). Defaults to None.
metadata (PyTree, optional) – optional metadata with leaf shape (B, …). Defaults to None.
- Returns
initial_condition (InitialCondition) – updated initial condition object
- Return type
Factorial HMM Transitions
- class ssm.factorial_hmm.transitions.FactorialTransitions(transitions)
Transitions over several hidden states evolving in parallel.
- distribution(state, covariates=None, metadata=None)
Return the conditional distribution of z_t given state z_{t-1}
- Parameters
state (int) – state z_{t-1}
covariates (PyTree, optional) – optional covariates with leaf shape (B, T, …). Defaults to None.
metadata (PyTree, optional) – optional metadata with leaf shape (B, …). Defaults to None.
- Returns
distribution (tfd.Distribution) – conditional distribution of z_t given state z_{t-1}.
- log_transition_matrices(data, covariates=None, metadata=None)
Returns the log probability of data where
if the transition probabilities are stationary or
if they are nonstationary.
- Parameters
data (np.ndarray) – observed data
- Returns
log probs (np.ndarray) – log probability as defined above
- m_step(data, posterior, covariates=None, metadata=None)
Update the transition parameters in an M step given posteriors over the latent states.
- Parameters
dataset (np.ndarray) – the observed dataset with shape (B, T, D)
posteriors (HMMPosterior) – posteriors over the latent states with leaf shape (B, …)
covariates (PyTree, optional) – optional covariates with leaf shape (B, T, …). Defaults to None.
metadata (PyTree, optional) – optional metadata with leaf shape (B, …). Defaults to None.
- Returns
transitions (Transitions) – updated transitions object
- Return type
Factorial HMM Emissions
- class ssm.factorial_hmm.emissions.FactorialEmissions(num_states)
- Parameters
num_states (tuple) –
- class ssm.factorial_hmm.emissions.NormalFactorialEmissions(num_states, means=None, log_scale=0.0, emissions_distribution=None, emissions_distribution_prior=None)
Normal Emissions for a Factorial HMM.
The emission mean is a sum of means associated with each group.
Can be initialized by specifying parameters or by passing in a pre-initialized
emissions_distributionobject.- Parameters
num_states (tuple) – number of discrete latent states per group
means (tuple or list, optional) – state-dependent and group-dependent emission means. Defaults to None.
variance (np.ndarray, optional) – emission variance shared by all states
emissions_distribution (ssmd.MultivariateNormalTriL, optional) – initialized emissions distribution. Defaults to None.
emissions_distribution_prior (ssmd.NormalInverseWishart, optional) – initialized emissions distribution prior. Defaults to None.
log_scale (float) –
- distribution(state, covariates=None, metadata=None)
Return the conditional distribution of emission x_t given state z_t and (optionally) covariates u_t.
- log_likelihoods(data, covariates=None, metadata=None)
Compute log p(x_t | z_t=(k_1, …, k_J)) for all t and (k_1,…,k_J).