0

我正在使用 scikit-learn 的hmmlearn模块运行一个简单的 HMM。它适用于完全观察到的数据,但是当我通过缺少数据的观察时它失败了。小例子:

import numpy as np
import hmmlearn
import hmmlearn.hmm as hmm

transmat = np.array([[0.9, 0.1],
                     [0.1, 0.9]])
emitmat = np.array([[0.5, 0.5],
                    [0.9, 0.1]])

# this does not work: cannot have missing data
obs = np.array([0, 1] * 5 + [np.nan] * 5)

# this works
#obs = np.array([0, 1] * 5 + [1] * 5)

startprob = np.array([0.5, 0.5])
h = hmm.MultinomialHMM(n_components=2,
                       startprob=startprob,
                       transmat=transmat)
h.emissionprob_ = emitmat
print obs, type(obs)
posteriors = h.predict_proba(obs)
print posteriors

如果obs完全观察到(每个元素都是 0 或 1)它可以工作,但我想获得未观察到的数据点的估计值。我尝试将这些编码为np.nanNone均无效。它给出了错误IndexError: arrays used as indices must be of integer (or boolean) type(在hmm.py", line 430, in _compute_log_likelihood)。

如何在 hmmlearn 中做到这一点?

4

1 回答 1

1

目前没有办法使用hmmlearn.

作为一种临时方法,您可以将观察序列划分为完全观察到的子序列,然后为每个子序列选择最有可能的下一个状态和观察,或者只是从转换和发射概率中随机模拟它们。请注意,此策略可能导致子序列边界不一致。

于 2016-01-27T14:08:15.047 回答