2011-10-28 13 views
6

私は隠れマルコフモデルを学び始めています。そしてwikiページやgithubには多くの例がありますが、ほとんどの確率は既にそこにあります(雨の70%の変化、状態の変化の可能性の30%など)。 )。スペルチェックや文例は、本を勉強してから単語の確率をランク付けするようです。隠れマルコフモデルの確率を決める方法は何ですか?

また、マルコフモデルには確率を計算する方法が含まれていますか、それとも事前計算する他のモデルを想定していますか?

申し訳ありませんが、この質問はオフです。私は、隠れマルコフモデルが確率的なシーケンスをどのように選択するのかを簡単に考えていますが、確率部分は私には少し灰色です(しばしば提供されるため)。例や任意の情報は素晴らしいでしょう。

マルコフモデルに精通していない方のため

は、ここにあなたがから、未知のパラメータを計算するアルゴリズムEM(期待値最大化)を探しているhttp://en.wikipedia.org/wiki/Viterbi_algorithm(ウィキペディアより)の例とhttp://en.wikipedia.org/wiki/Hidden_Markov_model

#!/usr/bin/env python 

states = ('Rainy', 'Sunny') 

observations = ('walk', 'shop', 'clean') 

start_probability = {'Rainy': 0.6, 'Sunny': 0.4} 

transition_probability = { 
    'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3}, 
    'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6}, 
    } 

emission_probability = { 
    'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5}, 
    'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1}, 
    } 

#application code 
# Helps visualize the steps of Viterbi. 
def print_dptable(V): 
    print " ", 
    for i in range(len(V)): print "%7s" % ("%d" % i), 
    print 

    for y in V[0].keys(): 
     print "%.5s: " % y, 
     for t in range(len(V)): 
      print "%.7s" % ("%f" % V[t][y]), 
     print 

def viterbi(obs, states, start_p, trans_p, emit_p): 
    V = [{}] 
    path = {} 

    # Initialize base cases (t == 0) 
    for y in states: 
     V[0][y] = start_p[y] * emit_p[y][obs[0]] 
     path[y] = [y] 

    # Run Viterbi for t > 0 
    for t in range(1,len(obs)): 
     V.append({}) 
     newpath = {} 

     for y in states: 
      (prob, state) = max([(V[t-1][y0] * trans_p[y0][y] * emit_p[y][obs[t]], y0) for y0 in states]) 
      V[t][y] = prob 
      newpath[y] = path[state] + [y] 

     # Don't need to remember the old paths 
     path = newpath 

    print_dptable(V) 
    (prob, state) = max([(V[len(obs) - 1][y], y) for y in states]) 
    return (prob, path[state]) 



#start trigger 
def example(): 
    return viterbi(observations, 
        states, 
        start_probability, 
        transition_probability, 
        emission_probability) 
print example() 

答えて

4

です観察された配列のセット。おそらく最も一般的に使用されるアルゴリズムはBaum-Welchアルゴリズムであり、アルゴリズムはforward-backwardです。

ここでは、これまでに私がHMMをレビューするために使用したset of slidesを紹介します。これは、前方 - 後方、ビテルビ、およびバウム - ウェルチの素敵な概要を持っています

+0

ありがとう、ありがとう。私がスライドの前に読んだリンクは本当に良かった。彼らは私が持っていた質問の多くを明確にしましたが、私は確率がどのように計算されるかまだ分かりません。例えば、スライド上では、それらは各ノード(1/3,1/2等)に対して確率を有する。私はそれらを手に入れて、それらを更新し続ける方法を理解しようとしています。それはスライドの中にあるかもしれないし、私はそれを見逃しているので、私はこれに新しいので、私は週末にもっと慎重にそれを研究するつもりです。スライドと答えに感謝します。 – Lostsoul

+0

@Lostsoul - Right、slide 41とその領域は、HMMの一般的な動作を説明するだけのものです。スライド68の周りには、一連の観測値からパラメータを推定する方法(λと総称します)について話し始めます。それを行うアルゴリズムはBaum-Welchです。 – Dusty

+0

ありがとうもう一度私はあなたに十分に感謝することはできません。私の数学はうまくいくので、何が起こっているのかを理解するためにスライドのいくつかの読み(グーグルグーグル)が必要でした。私は数学を完全に理解していませんが、私は今論理を取得します。もう一度ありがとう、Dusty。 – Lostsoul

関連する問題