Изменения

Перейти к: навигация, поиск

Алгоритм "Вперед-Назад"

310 байт добавлено, 04:24, 14 января 2013
Нет описания правки
Нам требуется найти <tex>P(X_t = i | O) = P(X_t = i | O_{1,t-1} \cap O_{t,T})</tex>. Поскольку будущее Марковской цепи не зависит от прошлого, мы можем утверждать, что вероятность того, что мы будем наблюдать события <tex>O_{t,T}</tex> не зависит от того, что в прошлом мы наблюдали последовательность <tex>O_{1,t-1}</tex>, и, следовательно:
<tex>P(X_t = i | O_{1,t-1} \cap O_{t,T}) = </tex> <tex dpi="180">\frac{P(X_t = i | O_{1,t-1}) \cdot P(X_t = i | O_{t,T})}{P(O)} </tex> <tex>=</tex> <tex dpi= "180">\frac{\alpha_{i}(t) \cdot \beta_{i}(t)}{P(O)}</tex>
=== Проход вперед ===
Теперь найдем вероятность того, что в момент <tex>t</tex> цепь будет в состоянии <tex>s</tex>:
<tex dpi="180">P(X_t = s | O) = P(X_t = s | O_{1,t-1} \cap O_{t,T}) = </tex> <tex dpi="180">\frac{P(X_t = s | O_{1,t-1}) \cdot P(X_t = s | O_{t,T})}{P(O)} </tex> <tex>= </tex> <tex dpi="180">\frac{\alpha_{s}(t) \cdot \beta_{s}(t)}{P(O)} </tex> <tex>= \\</tex> <tex>=</tex> <tex dpi= "180">\frac{\alpha_s(t)\cdot \beta_s(t)}{\sum_{i \in S}\alpha_s(t)\cdot \beta_s(t)}</tex>
== Псевдокод ==
alpha(s, t):
if (s, t) in fwd: return fwd[s, t]
fwdf = 0 for j in S: f += alpha(j, t-1) * transition_probability[j][s, t] f *= emit_probability[s -> ][observations[t]] * sum( fwd[alpha(js, t-1) * transition_probability[j -> s] for j in S])= f
return fwd[s, t]
beta(s, t):
if (s, t) in bkw: return bkw[s, t]
bkw[s, t] b = 0 for j in S: b += sum([beta(j, t+1) * transition_probability[s -> ][j] * emit_probability[j -> ][O[t]] for j in S bkw[s, t])= b
return bkw[s, t]
forward_backward(s, t):
return (chain_probability = 0 for j in S: chain_probability = alpha(sj, t)*beta(sj, t)) / sum return ([alpha(js, t)*beta(js, t) for j in S])/ chain_probability
119
правок

Навигация