8

私は隠れマルコフモデルが初めてです。私は主なアイデアを理解しており、理解を深めるためにいくつかの Matlab 組み込み HMM 関数を試しました。

一連の観測と対応する状態がある場合、たとえば

seq =    2     6     6     1     4     1     1     1     5     4
states = 1     1     2     2     2     2     2     2     2     2

hmmestimate関数を 使用して、次のように遷移確率行列と放出確率行列を計算できます。

[TRANS_EST, EMIS_EST] = hmmestimate(seq, states)

TRANS_EST =

0.5000    0.5000
     0    1.0000

EMIS_EST =

     0    0.5000         0         0         0    0.5000
0.5000         0         0    0.2500    0.1250    0.1250

この例では、観察は単一の値です。

以下の例の図は、私の状況を説明しています。 私の状況 状態が {Sleep, Work, Sport} で、一連の観測があるとします: {lightoff, light on, heart rate>100 .....} 各観測を表すために数値を使用すると、私の状況ではそれぞれ状態には同時に複数の観測があります。

seq =    {2,3,5}     {6,1}     {2}     {2,3,6}     {4}     {1,2}     {1}    
states = 1             1        2         2         2        2        2    

これを Matlab で実装して遷移と放出確率行列を取得する方法がわかりません。私はかなり迷っています。次のステップで何をすればよいですか? 正しいアプローチを使用していますか?

ありがとう!

4

2 に答える 2

4

隠れ状態シーケンスがわかっている場合、最大尤度推定は自明です。これは、正規化された経験的カウントです。つまり、遷移と放出を数え上げてから、各行の要素をその行の合計数で割ります。

複数の観測変数がある場合は、各要素がその時間ステップのランダム変数の 1 つの値を与えるベクトルとして観測をコーディングします (例: '{lights=1, computer=0, Heart Rate >100 = 1)。 、場所 = 0}'。重要なのは、各時間ステップで同じ数の観測値が必要であるということです。

于 2013-03-13T04:29:01.560 に答える
1

あなたには2つの選択肢があると思います。1) 複数の観測結果を 1 つの数値にコード化します。たとえば、観測値の可能な最大値が N であることがわかっていて、各状態で最大 K 個の観測値を持つ可能性がある場合、観測値の任意の組み合わせを 0 ~ N^K - 1 の数値としてコーディングできます。これを行うと、{2,3,6} と {2,3,5} は何も共有せず、2 つの観測結果が完全に異なると想定されます。2) または、状態ごとに複数の排出分布を持つことができます。HMM推定にmatlabの組み込み関数を使用したことがないため、それがサポートされているかどうかはわかりません。しかし、ある州に複数の排出分布がある場合、排出の可能性はそれらの積にすぎません。これはジェラドが提案するものです。

于 2013-03-13T04:43:12.470 に答える