Каковы способы определения вероятностей в скрытых марковских моделях?

Я начинаю изучать скрытые модели Маркова, и на вики-странице, а также на github есть много примеров, но большая часть вероятностей уже есть ( 70% изменение дождя, 30% вероятность изменения состояния и т. Д.). Проверка орфографии или примеры предложений, похоже, изучают книги, а затем ранжируют вероятности слов.

Также марковская модель включает способ вычисления из вероятностей, или мы предполагаем, что какая-то другая модель предварительно рассчитает его?

Извините, если этот вопрос отключен. Я думаю, что это просто, как скрытая марковская модель выбирает вероятные последовательности, но часть вероятности для меня немного серая (потому что это часто предоставляется). Примеры или любая информация были бы замечательными.


Для тех, кто n Не знаком с марковскими моделями, вот пример (из Википедии) 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()

7
задан Lostsoul 28 October 2011 в 19:25
поделиться