2

我正在使用 hmmlearn 的 GaussianHMM 来训练具有高斯观测的隐马尔可夫模型。每个隐藏状态 k 都有其对应的高斯参数:mu_k,Sigma_k。

训练模型后,我想计算以下数量:

P(z_{T+1} = j | x_{1:T}),

其中 j = 1, 2, ... K, K 是隐藏状态的数量。

上面的概率基本上是一步前的隐藏状态概率,给定一个完整的观察序列:x_1, x_2, ..., x_T,其中 x_i, i=1,...,T 用于训练 HMM模型。

我阅读了文档,但找不到计算这个概率的函数。有什么解决方法吗?

4

2 回答 2

4

您正在寻找的概率只是转换矩阵的一行。转移矩阵的第 n 行给出了在t+1知道系统在时间 的状态的情况下转移到每个状态的概率t

为了知道在t给定一系列观察时系统处于哪个状态,x_1,...,x_t可以使用 Viterbi 算法,它是 中方法的默认predict设置hmmlearn

model = hmm.GaussianHMM(n_components=3, covariance_type="full", n_iter=100)  # Viterbi is set by default as the 'algorithm' optional parameter.
model.fit(data)
state_sequence = model.predict(data)
prob_next_step = model.transmat_[state_sequence[-1], :]

我建议您仔细查看显示具体使用示例的文档。

于 2017-07-25T14:59:41.327 回答
0

训练HMMmodel后,您可以得到t+1状态给定的1:t观察结果X,如下所示:

import numpy as np
from sklearn.utils import check_random_state
sates = model.predict(X)
transmat_cdf = np.cumsum(model.transmat_, axis=1)
random_sate = check_random_state(model.random_state)
next_state = (transmat_cdf[states[-1]] > random_state.rand()).argmax()

t+1状态是根据状态生成ttransmat_

于 2018-07-13T07:23:49.930 回答