我使用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,但无法找到计算此概率的函数。有没有解决方法?
答案 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
状态