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

Я начинаю изучать скрытые модели Маркова и на вики-странице, а также на 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()
7 голосов | спросил Lostsoul 28 +04002011-10-28T22:12:38+04:00312011bEurope/MoscowFri, 28 Oct 2011 22:12:38 +0400 2011, 22:12:38

1 ответ


0

Вы ищете алгоритм EM (максимизация ожидания) для вычисления неизвестных параметров из наборов наблюдаемых последовательностей. Вероятно, наиболее часто используемым является Baum-Welch алгоритм, который использует алгоритм вперед-назад .

Для справки: набор слайдов , который я использовал ранее для обзора СММ. У этого есть хороший обзор Форвард-назад, Витерби и Баум-Уэлча

ответил Dusty 28 +04002011-10-28T22:21:43+04:00312011bEurope/MoscowFri, 28 Oct 2011 22:21:43 +0400 2011, 22:21:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132