18

KevinMurphyのHMMツールボックスToolboxの使用方法を理解するのに苦労しています。それを経験した人がいくつかの概念的な質問を明確にすることができれば、それは大きな助けになるでしょう。私はHMMの背後にある理論をどういうわけか理解しましたが、実際にそれを実装し、すべてのパラメーター設定に言及する方法は混乱しています。

2つのクラスがあるため、2つのHMMが必要です。
トレーニングベクトルが:class1 O1 = {4 3 512}およびクラスO_2={1 4 324}であるとします。
ここで、システムは未知のシーケンスO3 = {1 3 244}をclass1またはclass2として分類する必要があります。

  1. obsmat0とobsmat1には何が入りますか?
  2. 遷移確率transmat0およびtransmat1の指定/構文はどうすればよいですか?
  3. この場合、変数データはどうなりますか?
  4. 5つの一意の番号/記号が使用されているため、状態の数はQ = 5になりますか?
  5. 出力シンボル数=5?
  6. 遷移確率transmat0とtransmat1についてどのように言及しますか?
4

2 に答える 2

38

個々の質問に答える代わりに、例を使用して HMM ツールボックスの使用方法を説明しましょう。これは、隠れマルコフ モデルを導入するときに通常使用される天気のです

基本的にモデルの状態は、晴れ、雨、霧の 3 種類の天気です。いつでも、天気はこれらの値の 1 つだけであると想定しています。したがって、HMM 状態のセットは次のとおりです。

S = {sunny, rainy, foggy}

ただし、この例では、天気を直接観測することはできません (どうやら地下室に閉じ込められているようです!)。代わりに、私たちが持っている唯一の証拠は、あなたを毎日チェックする人が傘を持っているかどうかです. HMM 用語では、これらは離散観測です。

x = {umbrella, no umbrella}

HMM モデルの特徴は次の 3 つです。

  • 事前確率: シーケンスの最初の状態にある確率のベクトル。
  • 遷移確率: 天候のある状態から別の状態に移行する確率を表すマトリックス。
  • 放出確率: 状態 (天気) が与えられたときに出力 (傘であるかどうか) を観測する確率を記述するマトリックス。

次に、これらの確率が与えられるか、トレーニング セットから学習する必要があります。それが完了すると、HMM モデル (または一連のモデル、および最も可能性の高いモデルを選択する) に関して観測シーケンスの尤度を計算するような推論を行うことができます...

1) 既知のモデル パラメータ

モデルを構築するために既存の確率を埋める方法を示すサンプル コードを次に示します。

Q = 3;    %# number of states (sun,rain,fog)
O = 2;    %# number of discrete observations (umbrella, no umbrella)

%#  prior probabilities
prior = [1 0 0];

%# state transition matrix (1: sun, 2: rain, 3:fog)
A = [0.8 0.05 0.15; 0.2 0.6 0.2; 0.2 0.3 0.5];

%# observation emission matrix (1: umbrella, 2: no umbrella)
B = [0.1 0.9; 0.8 0.2; 0.3 0.7];

次に、このモデルから一連のシーケンスをサンプリングできます。

num = 20;           %# 20 sequences
T = 10;             %# each of length 10 (days)
[seqs,states] = dhmm_sample(prior, A, B, num, T);

たとえば、5 番目の例は次のとおりです。

>> seqs(5,:)        %# observation sequence
ans =
     2     2     1     2     1     1     1     2     2     2

>> states(5,:)      %# hidden states sequence
ans =
     1     1     1     3     2     2     2     1     1     1

シーケンスの対​​数尤度を評価できます。

dhmm_logprob(seqs(5,:), prior, A, B)

dhmm_logprob_path(prior, A, B, states(5,:))

またはビタビ パス (最も可能性の高い状態シーケンス) を計算します。

vPath = viterbi_path(prior, A, multinomial_prob(seqs(5,:),B))

5番目の例

2) 不明なモデル パラメータ

トレーニングは EM アルゴリズムを使用して実行され、一連の観測シーケンスを使用して行うのが最適です。

同じ例を続けると、上記の生成されたデータを使用して新しいモデルをトレーニングし、元のモデルと比較できます。

%# we start with a randomly initialized model
prior_hat = normalise(rand(Q,1));
A_hat = mk_stochastic(rand(Q,Q));
B_hat = mk_stochastic(rand(Q,O));  

%# learn from data by performing many iterations of EM
[LL,prior_hat,A_hat,B_hat] = dhmm_em(seqs, prior_hat,A_hat,B_hat, 'max_iter',50);

%# plot learning curve
plot(LL), xlabel('iterations'), ylabel('log likelihood'), grid on

対数尤度

州の順序が一致する必要はないことに注意してください。そのため、2 つのモデルを比較する前に状態を並べ替える必要があります。この例では、トレーニング済みのモデルは元のモデルに近くなっています。

>> p = [2 3 1];              %# states permutation

>> prior, prior_hat(p)
prior =
     1     0     0
ans =
      0.97401
  7.5499e-005
      0.02591

>> A, A_hat(p,p)
A =
          0.8         0.05         0.15
          0.2          0.6          0.2
          0.2          0.3          0.5
ans =
      0.75967      0.05898      0.18135
     0.037482      0.77118      0.19134
      0.22003      0.53381      0.24616

>> B, B_hat(p,[1 2])
B =
          0.1          0.9
          0.8          0.2
          0.3          0.7
ans =
      0.11237      0.88763
      0.72839      0.27161
      0.25889      0.74111

分類やパターン認識など、隠れマルコフ モデルでできることは他にもあります。異なるクラスに属する観測シーケンスの異なるセットを持つことになります。各セットのモデルをトレーニングすることから始めます。次に、新しい観測シーケンスが与えられたら、各モデルに関する尤度を計算して分類し、対数尤度が最も高いモデルを予測できます。

argmax[ log P(X|model_i) ] over all model_i
于 2012-03-18T00:10:00.383 に答える
1

あなたが言及したツールボックスは使用しませんが、HTK は使用します。HTKの機能をわかりやすく説明した本があり、無料で入手できます

http://htk.eng.cam.ac.uk/docs/docs.shtml

導入の章は、理解を助けるかもしれません。

あなたのリストの 4 番に簡単にお答えできます。. . 放出状態の数は、特徴ベクトルの長さと複雑さに関連しています。ただし、アーキテクチャによっては、各発光状態がそれ自体に戻ったり、前の状態に戻ったりする可能性があるため、特徴ベクトルの配列の長さと同じである必要はありません。あなたが与える値に、うーんの最初と最後に非発光状態が含まれているかどうかもわかりませんが、これらも考慮する必要があります。状態数の選択は、多くの場合試行錯誤に帰着します。

幸運を!

于 2012-03-16T09:21:10.530 に答える