hmmlearn:给定一个完整的观察序列1:T,如何在时间T + 1得到隐藏状态概率的预测

时间:2017-06-04 03:15:24

标签: python hidden-markov-models hmmlearn

我使用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模型。

我阅读了documentation,但无法找到计算此概率的函数。有没有解决方法?

2 个答案:

答案 0 :(得分:2)

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

为了知道在给定观察序列t的情况下系统处于哪个状态x_1,...,x_t,可以使用维特比算法,该算法是方法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], :]

我建议你仔细看看这个显示具体用例的documentation

答案 1 :(得分:0)

训练好HMM BaseAddress之后,您可以根据以下观察情况model 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

生成t状态