Алгоритм "Вперед-Назад" — различия между версиями
Gfv (обсуждение | вклад) |
Gfv (обсуждение | вклад) (-- -> {{---}}) |
||
Строка 1: | Строка 1: | ||
− | Пусть дана скрытая Марковская модель <tex>\lambda = \{\bold{S}, \bold{\Sigma}, \bold{\Pi}, \bold{A}, \bold{B}\}</tex>, где <tex>\bold{S} = \{s_1, ..., s_n\}</tex> -- состояния, <tex>\bold{\Sigma} = \{\omega_1, ..., \omega_m\}</tex> -- возможные события, <tex>\bold{\Pi} = \{\pi_1, ..., \pi_n\}</tex> -- начальные вероятности, <tex>\bold{A} = \{a_{ij}\}</tex> -- матрица переходов, а <tex>\bold{B} = \{b_{i\omega_k}\}</tex> -- вероятность наблюдения события <tex>\omega_k</tex> после перехода в состояние <tex>s_i</tex>. | + | Пусть дана скрытая Марковская модель <tex>\lambda = \{\bold{S}, \bold{\Sigma}, \bold{\Pi}, \bold{A}, \bold{B}\}</tex>, где <tex>\bold{S} = \{s_1, ..., s_n\}</tex> {{---}} состояния, <tex>\bold{\Sigma} = \{\omega_1, ..., \omega_m\}</tex> {{---}} возможные события, <tex>\bold{\Pi} = \{\pi_1, ..., \pi_n\}</tex> {{---}} начальные вероятности, <tex>\bold{A} = \{a_{ij}\}</tex> {{---}} матрица переходов, а <tex>\bold{B} = \{b_{i\omega_k}\}</tex> {{---}} вероятность наблюдения события <tex>\omega_k</tex> после перехода в состояние <tex>s_i</tex>. |
За <tex>T</tex> шагов в этой модели получилась последовательность наблюдений <tex>O_{1,T} = {o_1, ..., o_T}</tex>. | За <tex>T</tex> шагов в этой модели получилась последовательность наблюдений <tex>O_{1,T} = {o_1, ..., o_T}</tex>. | ||
Строка 5: | Строка 5: | ||
Алгоритм "вперед-назад" позволяет найти в скрытой Марковской модели вероятность попадания в состояние <tex>s_i</tex> на <tex>t</tex>-ом шаге при последовательности наблюдений <tex>O</tex> и (скрытой) последовательности состояний <tex>X</tex>. | Алгоритм "вперед-назад" позволяет найти в скрытой Марковской модели вероятность попадания в состояние <tex>s_i</tex> на <tex>t</tex>-ом шаге при последовательности наблюдений <tex>O</tex> и (скрытой) последовательности состояний <tex>X</tex>. | ||
== Вычисление == | == Вычисление == | ||
− | Пусть в момент <tex>t</tex> мы оказались в состоянии <tex>i</tex>: <tex>X_t = i</tex>. Назовем <tex>\alpha_{i}(t)</tex> вероятность того, что при этом во время переходов образовалась последовательность наблюдений <tex>O_{1,t-1}</tex>, а <tex>\beta_{i}(t)</tex> | + | Пусть в момент <tex>t</tex> мы оказались в состоянии <tex>i</tex>: <tex>X_t = i</tex>. Назовем <tex>\alpha_{i}(t)</tex> вероятность того, что при этом во время переходов образовалась последовательность наблюдений <tex>O_{1,t-1}</tex>, а <tex>\beta_{i}(t)</tex> {{---}} вероятность того, что после этого состояния мы будем наблюдать последовательность наблюдений <tex>O_{t,T}</tex>: |
<tex>\alpha_{i}(t) \overset{def}{=} P(O_{1, t-1} | X_t = i) \\ | <tex>\alpha_{i}(t) \overset{def}{=} P(O_{1, t-1} | X_t = i) \\ |
Версия 04:13, 14 января 2013
Пусть дана скрытая Марковская модель
, где — состояния, — возможные события, — начальные вероятности, — матрица переходов, а — вероятность наблюдения события после перехода в состояние .За
шагов в этой модели получилась последовательность наблюдений .Алгоритм "вперед-назад" позволяет найти в скрытой Марковской модели вероятность попадания в состояние
на -ом шаге при последовательности наблюдений и (скрытой) последовательности состояний .Вычисление
Пусть в момент
мы оказались в состоянии : . Назовем вероятность того, что при этом во время переходов образовалась последовательность наблюдений , а — вероятность того, что после этого состояния мы будем наблюдать последовательность наблюдений :
Нам требуется найти
. Поскольку будущее Марковской цепи не зависит от прошлого, мы можем утверждать, что вероятность того, что мы будем наблюдать события не зависит от того, что в прошлом мы наблюдали последовательность , и, следовательно:
Проход вперед
Заметим, что в
нужно считать равной , как вероятность получить первое событие из начального распределения.Для следующих
можно вычислить рекуррентно:
Итак, вероятность попасть в состояние
на -ом шаге, учитывая, что после перехода произойдет событие будет равна вероятности быть в состоянии на -ом шаге, умноженной на вероятность перейти из состояния в , произведя событие для всех .Проход назад
Аналогично,
, так как произвольная цепочка наблюдений будет произведена, какими бы ни были состояния.Предыдущие
считаются рекуррентно:
Сглаживание вероятности
Итак, для произвольного состояния
в произвольный шаг теперь известна вероятность того, что на пути к нему была произведена последовательность и вероятность того, что после него будет произведена последовательность . Чтобы найти вероятность того, что будет произведена цепочка событий, найти , нужно просуммировать произведение обеих вероятностей для всех состояний при произвольном шаге t: .Теперь найдем вероятность того, что в момент
цепь будет в состоянии :
Псевдокод
fwd = {} bkw = {} for s in S: fwd[s, 1] = emit_probability[s][observations[1]] * П[s] bkw[s, len(observations) - 1] = 1 alpha(s, t): if (s, t) in fwd: return fwd[s, t] fwd[s, t] = emit_probability[s -> observations[t]] * sum([alpha(j, t-1) * transition_probability[j -> s] for j in S]) return fwd[s, t] beta(s, t): if (s, t) in bkw: return bkw[s, t] bkw[s, t] = sum([beta(j, t+1) * transition_probability[s -> j] * emit_probability[j -> O[t]] for j in S]) return bkw[s, t] forward_backward(s, t): return (alpha(s, t)*beta(s, t)) / sum([alpha(j, t)*beta(j, t) for j in S])