隠れマルコフモデル(復号化問題)を使って隠れ状態を予測したいと思います。データはカテゴリに分類されます。隠れた状態には、空腹、休息、練習、および映画が含まれます。観察セットには、食べ物、家庭、屋外&レクレーションと芸術&エンターテイメントが含まれます。私のプログラムは、観測シーケンス(Baum-Welchアルゴリズム)に基づいてHMMを最初に訓練するものです。そして、隠れ状態のシーケンスを予測するためにデコード(ビタビアルゴリズム)を行います。hmmlearn(隠れマルコフモデル)でデコードした後、隠れ状態を対応するカテゴリにマップする方法は?
私の質問は、結果(非負の整数)をHungryやRestなどの対応するカテゴリにどのようにマッピングできるかということです。トレーニングアルゴリズムの非決定論的特性のために、パラメータは同じデータの各トレーニングごとに異なる。したがって、次のコードのように地図を作成すると、隠れ状態のシーケンスが毎回異なります。次のように
コードは次のとおりです。
from __future__ import division
import numpy as np
from hmmlearn import hmm
states = ["Hungry", "Rest", "Exercise", "Movie"]
n_states = len(states)
observations = ["Food", "Home", "Outdoor & Recreation", "Arts & Entertainment"]
# The number in this sequence is the index of observation
category_sequence = [1, 0, 1, 2, 1, 3, 1]
Location = np.array([category_sequence]).T
model = hmm.MultinomialHMM(n_components=n_states).fit(Location)
logprob, result = model.decode(Location)
print "Category:", ", ".join(map(lambda x: observations[x], Location.T[0]))
print "Intent:", ", ".join(map(lambda x: states[x], result))
こんにちは、セルゲイ、あなたから聞いてうれしいです。最初のものについては、hmmlearnモジュールで半監督のやり方でそれをどうやってやり遂げることができるのか少し混乱しています。関数フィットを呼び出すと、入力は観測のみになります。それについてもっと教えていただけますか?ありがとう。 – Isaiah
'hmmlearn'は現在HMMを使用した問題のすべてが監督されていない(つまり、ラベルデータがまったく利用できない)ので、2番目のアプローチが必要なので、これを自動的に行う方法はありません。とにかく、私は答えを更新しました。 'guess_labels'の出力があなたのデータに意味をなさせるかどうか教えてください。 –
Sergeiさん、ありがとうございます。データを訓練するためにLSTMに切り替えるだけでOKです。 – Isaiah