首页 文章

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

提问于
浏览
1

我正在使用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 回答

  • 1

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

    为了知道在给定观察序列的情况下系统处于哪个状态 x_1,...,x_t ,可以使用维特比算法,该算法是 hmmlearn 中方法 predict 的默认设置 .

    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 .

  • 0

    一旦HMM model 被训练,您可以获得 t+1 状态 1:t observation 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 状态和 transmat_ 生成 t+1 状态

相关问题