7

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

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

この質問がずれている場合は申し訳ありません。隠れマルコフモデルが可能性のあるシーケンスを選択する方法は簡単だと思いますが、確率の部分は私には少し灰色です(頻繁に提供されるため)。例や情報は素晴らしいでしょう。


マルコフモデルに慣れていない人のために、ここに例があります(ウィキペディアから)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

1 に答える 1

5

観測されたシーケンスのセットから未知のパラメーターを計算する EM (期待値最大化) アルゴリズムを探しています。おそらく最も一般的に使用されるのは、前方後方アルゴリズムを使用するBaum-Welchアルゴリズムです。

参考までに、以前に HMM のレビューに使用した一連のスライドを次に示します。Forward-Backward、Viterbi、および Baum-Welch の優れた概要があります。

于 2011-10-28T18:21:43.327 に答える