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.nanこれらをorとしてエンコードしようとしましNoneたが、どちらも機能しません。エラーが発生しますIndexError: arrays used as indices must be of integer (or boolean) typehmm.py", line 430, in _compute_log_likelihood)。

これは hmmlearn でどのように行うことができますか?

4

1 に答える 1

1

現在、 を使用して欠損データの代入を行う方法はありませんhmmlearn

アドホックなアプローチとして、観測シーケンスを完全に観測されたサブシーケンスに分割し、各サブシーケンスについて、最も可能性の高い次の状態と観測を選択するか、遷移と放出の確率からランダムにシミュレートすることができます。この戦略は、サブシーケンス境界で矛盾を引き起こす可能性があることに注意してください。

于 2016-01-27T14:08:15.047 に答える