Алгоритм Баума-Велша — различия между версиями
м (→Пример) |
Paul1298 (обсуждение | вклад) м (→Описание алгоритма) |
||
Строка 6: | Строка 6: | ||
Пусть <tex>Q_t</tex> — это дискретная случайная переменная, принимающая одно из <tex>N</tex> значений <tex>(1..N)</tex>. Будем полагать, что данная модель Маркова, определенная как <tex>P(Q_t | Q_{t - 1})</tex> однородна по времени, то есть независима от <tex>t</tex>. Тогда можно задать <tex>P(Q_t | Q_{t - 1}) </tex> как независящую от времени стохастическую матрицу перемещений <tex>A = \{a_{ij}\} = p(Q_t = j | Q_{t - 1} = i)</tex>. Особый случай для времени <tex>t = 1</tex> определяется начальным распределением <tex>\pi_i = P(Q_1 = i)</tex>. | Пусть <tex>Q_t</tex> — это дискретная случайная переменная, принимающая одно из <tex>N</tex> значений <tex>(1..N)</tex>. Будем полагать, что данная модель Маркова, определенная как <tex>P(Q_t | Q_{t - 1})</tex> однородна по времени, то есть независима от <tex>t</tex>. Тогда можно задать <tex>P(Q_t | Q_{t - 1}) </tex> как независящую от времени стохастическую матрицу перемещений <tex>A = \{a_{ij}\} = p(Q_t = j | Q_{t - 1} = i)</tex>. Особый случай для времени <tex>t = 1</tex> определяется начальным распределением <tex>\pi_i = P(Q_1 = i)</tex>. | ||
− | Будем считать, что мы в состоянии <tex>j</tex> в момент времени <tex>t</tex>, если <tex>Q_t = j</tex>. Последовательность заданных состояний определяется как <tex>q = | + | Будем считать, что мы в состоянии <tex>j</tex> в момент времени <tex>t</tex>, если <tex>Q_t = j</tex>. Последовательность заданных состояний определяется как <tex>q = \{q_1 \dots q_T \}</tex>, где <tex>q_t \in \{ 1..N\}</tex> является состоянием в момент времени <tex>t</tex>. |
− | Наблюдение может иметь одно из <tex>L</tex> возможных значений, <tex>Q_t \in \{o_1 | + | Наблюдение может иметь одно из <tex>L</tex> возможных значений, <tex>Q_t \in \{o_1 \dots o_L\}</tex>. Вероятность заданного вектора наблюдений в момент времени <tex>t</tex> для состояния <tex>j</tex> определяется как <tex>b_j(o_t) = P(O_t = o_t | Q_t = j)\ ( B = \{ b_{ij}\}</tex> — это матрица <tex>L</tex> на <tex>N)</tex>. Заданная последовательность наблюдений <tex>O</tex> выражается как <tex> O = (O_1 = o_1, \dots ,O_T = o_T)</tex>. |
Следовательно, мы можем описать скрытую модель Маркова с помощью <tex> \lambda = (A, B, \pi)</tex>. При заданном векторе наблюдений <tex>O</tex> алгоритм Баума-Велша находит <tex> \lambda^*=\max_\lambda P(O\mid\lambda)</tex>. <tex>\lambda</tex> максимизирует вероятность наблюдений <tex>O</tex>. | Следовательно, мы можем описать скрытую модель Маркова с помощью <tex> \lambda = (A, B, \pi)</tex>. При заданном векторе наблюдений <tex>O</tex> алгоритм Баума-Велша находит <tex> \lambda^*=\max_\lambda P(O\mid\lambda)</tex>. <tex>\lambda</tex> максимизирует вероятность наблюдений <tex>O</tex>. | ||
Строка 21: | Строка 21: | ||
=== Прямая процедура === | === Прямая процедура === | ||
− | <tex>a_i(t) = p(O_1 = o_1 | + | <tex>a_i(t) = p(O_1 = o_1 \dots O_t = o_t, Q_t = _i | \lambda</tex>, что является вероятностью получения заданной последовательности <tex>\{ o_1 \dots o_t \}</tex> для состояния <tex>i</tex> в момент времени <tex>t</tex>. |
<tex>a_i(t)</tex> можно вычислить рекурсивно: | <tex>a_i(t)</tex> можно вычислить рекурсивно: | ||
Строка 31: | Строка 31: | ||
=== Обратная процедура === | === Обратная процедура === | ||
− | Данная процедура позволяет вычислить вероятность конечной заданной последовательности <tex>o_{t + 1} | + | Данная процедура позволяет вычислить вероятность конечной заданной последовательности <tex>\{ o_{t + 1} \dots o_T \}</tex> при условии, что мы начали из исходного состояния <tex>i</tex>, в момент времени <tex>t</tex>. |
<tex>\beta_i(t)</tex> можно вычислить рекурсивно: | <tex>\beta_i(t)</tex> можно вычислить рекурсивно: |
Версия 14:17, 2 июня 2017
Алгоритм Баума-Велша (англ. Baum–Welch algorithm) — алгоритм для нахождения неизвестных параметров скрытой Марковской модели. Использует алгоритм прямого-обратного хода.
Содержание
История
Скрытые Марковские модели (HMMs) и алгоритм Баума-Велша впервые были описаны в заметках Леонарда Баума и его сверстников в конце 1960х. Одно из первых основных приложений на основе HMMs было использовано в области обработки речи. В 1980х HMMs стало эффективным инструментом в анализе биологических систем и информации, особенно в генном анализе.
Описание алгоритма
Пусть
— это дискретная случайная переменная, принимающая одно из значений . Будем полагать, что данная модель Маркова, определенная как однородна по времени, то есть независима от . Тогда можно задать как независящую от времени стохастическую матрицу перемещений . Особый случай для времени определяется начальным распределением .Будем считать, что мы в состоянии
в момент времени , если . Последовательность заданных состояний определяется как , где является состоянием в момент времени .Наблюдение может иметь одно из
возможных значений, . Вероятность заданного вектора наблюдений в момент времени для состояния определяется как — это матрица на . Заданная последовательность наблюдений выражается как .Следовательно, мы можем описать скрытую модель Маркова с помощью
. При заданном векторе наблюдений алгоритм Баума-Велша находит . максимизирует вероятность наблюдений .
Исходные данные:
со случайными начальными условиями. Алгоритм итеративно обновляет параметр до схождения в одной точке.
Прямая процедура
, что является вероятностью получения заданной последовательности для состояния в момент времени .
можно вычислить рекурсивно:
1.
;2.
.Обратная процедура
Данная процедура позволяет вычислить вероятность конечной заданной последовательности
при условии, что мы начали из исходного состояния , в момент времени .можно вычислить рекурсивно:
1.
;2.
.Обновление переменных
Определим временные переменные:
.
Имея
и , можно определить:,
,
.
Используя новые переменные
итерации продолжаются до схождения.Пример
Предположим, у нас есть курица, с которой мы собираем яйца. Снесла ли курица яйца — зависит от некоторых неизвестных факторов. Для простоты предположим, что существуют лишь два состояния, которые определяют есть ли яйца. В начальный момент нам неизвестно текущее состояние, также нам неизвестна вероятность перехода из одного состояния в другое. Для начала возьмем произвольные матрицы переходов и состояний.
|
|
|
Рассмотрим набор наблюдений (E — яйца отложены, N — яйца не отложены): NN, NN, NN, NN, NE, EE, EN, NN, NN.
Следующим шагом оценим новую матрицу переходов:
Последовательность | Вероятность последовательности и состояний | Наибольшая вероятность наблюдения |
---|---|---|
NN | 0.024 | 0.3584 S2,S2 |
NN | 0.024 | 0.3584 S2,S2 |
NN | 0.024 | 0.3584 S2,S2 |
NN | 0.024 | 0.3584 S2,S2 |
NE | 0.006 | 0.1344 S2,S1 |
EE | 0.014 | 0.0490 S1,S1 |
EN | 0.056 | 0.0896 S2,S2 |
NN | 0.024 | 0.3584 S2,S2 |
NN | 0.024 | 0.3584 S2,S2 |
Итог | 0.22 | 2.4234 |
Таким образом получаем новую оценку перехода из
в , которая составляет . После этого можно подсчитать вероятность переходов из в , в , в и изменим их так, чтобы в суммы вероятностей давали 1. В итоге получаем новую матрицу переходов:
|
|
|
Далее оценим новую матрицу состояний:
Последовательности | Наибольшая вероятность наблюдения Если допустимо, что E получено из |
Наибольшая вероятность наблюдения |
---|---|---|
NE | 0.1344 S2,S1 | 0.1344 S2,S1 |
EE | 0.0490 S1,S1 | 0.0490 S1,S1 |
EN | 0.0560 S1,S2 | 0.0896 S1,S2 |
Итог | 0.2394 | 0.2730 |
Новая оценка для E, полученная из
, составляет .Благодаря этому, возможно рассчитать матрицу состояний:
|
|
|
Для оценки начальной вероятности, мы предполагаем, что все последовательности начаты со скрытого состояния
и рассчитаны с высокой вероятностью, а затем повторяем для . После нормализации получаем обновленный исходный вектор.Повторяем эти шаги до тех пор, пока вероятности не сойдутся.
Псевдокод
// T — конечный момент времени int[] DynamicOptionalStateSequance(, d): double [1, i] = [i] * b[i, d[1]] int [1, i] = [] int ans[] for t = 2 to T for i = 1 to n if [t, j] < [t - 1, i] * a[i, j] * b[j, d[t]] [t, j] = [t - 1, i] * a[i, j] * b[j, d[t]] [t, j] = i ans[T] = 1 for i = 2 to n if [T, i] > [T, i - 1] ans[T] = i for t = T - 1 downto 1 ans[t] = [t + 1, ans[t + 1]] return ans