Алгоритм Баума-Велша — различия между версиями
|  (→Пример) |  (→Пример) | ||
| Строка 70: | Строка 70: | ||
| |- | |- | ||
| ! Состояние 1   | ! Состояние 1   | ||
| − | |0.5 || 0.5 | + | |<tex>0.5</tex> || <tex>0.5</tex> | 
| |- | |- | ||
| ! Состояние 2    | ! Состояние 2    | ||
| − | |0.3 || 0.7 | + | |<tex>0.3</tex> || <tex>0.7</tex> | 
| |} | |} | ||
| || | || | ||
| Строка 82: | Строка 82: | ||
| |- | |- | ||
| ! Состояние 1   | ! Состояние 1   | ||
| − | |0.3 || 0.7 | + | |<tex>0.3</tex> || <tex>0.7</tex> | 
| |- | |- | ||
| ! Состояние 2    | ! Состояние 2    | ||
| − | |0.8 || 0.2 | + | |<tex>0.8</tex> || <tex>0.2</tex> | 
| |} | |} | ||
| || | || | ||
| Строка 92: | Строка 92: | ||
| |- | |- | ||
| ! Состояние 1   | ! Состояние 1   | ||
| − | |0.2 | + | |<tex>0.2</tex> | 
| |- | |- | ||
| ! Состояние 2    | ! Состояние 2    | ||
| − | |0.8 | + | |<tex>0.8</tex> | 
| |} | |} | ||
| |} | |} | ||
| Строка 109: | Строка 109: | ||
| ! Последовательность !! Вероятность последовательности и состояний !! Наибольшая вероятность наблюдения | ! Последовательность !! Вероятность последовательности и состояний !! Наибольшая вероятность наблюдения | ||
| |- | |- | ||
| − | | NN || 0.024 || 0.3584  | + | | <tex>NN</tex> ||  <tex>0.024</tex> || <tex>0.3584\,</tex>   <tex>S_2,</tex>  <tex>S_2</tex> | 
| |- | |- | ||
| − | | NN || 0.024 || 0.3584  | + | | <tex>NN</tex> ||  <tex>0.024</tex> || <tex>0.3584\,</tex>   <tex>S_2,</tex>  <tex>S_2</tex> | 
| |- | |- | ||
| − | | NN || 0.024 || 0.3584  | + | | <tex>NN</tex> ||  <tex>0.024</tex> || <tex>0.3584\,</tex>   <tex>S_2,</tex>  <tex>S_2</tex> | 
| |- | |- | ||
| − | | NN || 0.024 || 0.3584  | + | | <tex>NN</tex> ||  <tex>0.024</tex> || <tex>0.3584\,</tex>   <tex>S_2,</tex>  <tex>S_2</tex> | 
| |- | |- | ||
| − | | NE || 0.006 || 0.1344  | + | | <tex>NE</tex> ||  <tex>0.006</tex> || <tex>0.1344\,</tex>   <tex>S_2,</tex>  <tex>S_1</tex> | 
| |- | |- | ||
| − | | EE || 0.014 || 0.0490  | + | | <tex>EE</tex> ||  <tex>0.014</tex> || <tex>0.0490\,</tex>   <tex>S_1,</tex>  <tex>S_1</tex> | 
| |- | |- | ||
| − | | EN || 0.056 || 0.0896  | + | | <tex>EN</tex> ||  <tex>0.056</tex> || <tex>0.0896\,</tex>   <tex>S_2,</tex>  <tex>S_2</tex> | 
| |- | |- | ||
| − | | NN || 0.024 || 0.3584  | + | | <tex>NN</tex> ||  <tex>0.024</tex> || <tex>0.3584\,</tex>   <tex>S_2,</tex>  <tex>S_2</tex> | 
| |- | |- | ||
| − | | NN || 0.024 || 0.3584  | + | |  <tex>NN</tex> || <tex>0.024</tex> || <tex>0.3584\,</tex>  <tex>S_2,</tex> <tex>S_2</tex> | 
| |- | |- | ||
| ! Итог | ! Итог | ||
| − | | 0.22 || 2.4234 | + | | <tex>0.22</tex> || <tex>2.4234</tex> | 
| |} | |} | ||
| </center><br /> | </center><br /> | ||
| − | Таким образом получаем новую оценку перехода из <tex> | + | Таким образом получаем новую оценку перехода из <tex>S_1</tex> в <tex>S_2</tex>, которая составляет <tex dpi="160">\dfrac{0.22}{2.4234}</tex><tex> = 0.0908</tex>. После этого можно подсчитать вероятность переходов из <tex>S_2</tex> в <tex>S_1</tex>, <tex>S_2</tex> в <tex>S_2</tex>, <tex>S_1</tex> в <tex>S_1</tex> и изменим их так, чтобы в суммы вероятностей давали <tex>1</tex>. В итоге получаем новую матрицу переходов: | 
| <center> | <center> | ||
| Строка 144: | Строка 144: | ||
| |- | |- | ||
| ! Состояние 1   | ! Состояние 1   | ||
| − | |0.5 || 0.5 | + | |<tex>0.5</tex> ||<tex> 0.5</tex> | 
| |- | |- | ||
| ! Состояние 2    | ! Состояние 2    | ||
| − | |0.3 || 0.7 | + | |<tex>0.3 </tex>|| <tex>0.7</tex> | 
| |} | |} | ||
| || | || | ||
| Строка 156: | Строка 156: | ||
| |- | |- | ||
| ! Состояние 1   | ! Состояние 1   | ||
| − | |0.0598 || 0.0908 | + | |<tex>0.0598</tex> || <tex>0.0908</tex> | 
| |- | |- | ||
| ! Состояние 2    | ! Состояние 2    | ||
| − | |0.2179 || 0.9705 | + | |<tex>0.2179</tex> ||<tex> 0.9705</tex> | 
| |} | |} | ||
| || | || | ||
| Строка 168: | Строка 168: | ||
| |- | |- | ||
| ! Состояние 1   | ! Состояние 1   | ||
| − | |0.3973 || 0.6027 | + | |<tex>0.3973</tex> ||<tex> 0.6027</tex> | 
| |- | |- | ||
| ! Состояние 2    | ! Состояние 2    | ||
| − | |0.1833 || 0.8167 | + | |<tex>0.1833</tex> ||<tex> 0.8167</tex> | 
| |} | |} | ||
| |} | |} | ||
| Строка 183: | Строка 183: | ||
| ! Последовательности !! Наибольшая вероятность наблюдения <br/> Если допустимо, что E получено из <tex>S1</tex> !! Наибольшая вероятность наблюдения | ! Последовательности !! Наибольшая вероятность наблюдения <br/> Если допустимо, что E получено из <tex>S1</tex> !! Наибольшая вероятность наблюдения | ||
| |- | |- | ||
| − | | NE || 0.1344  | + | | <tex>NE</tex> || <tex>0.1344\,</tex>  <tex> S_2, </tex> <tex>S_1</tex> || <tex>0.1344\,</tex>  <tex>S_2,</tex><tex> S_1</tex> | 
| |- | |- | ||
| − | | EE || 0.0490  | + | | <tex>EE</tex> || <tex>0.0490\,</tex>  <tex> S_1, </tex> <tex>S_1</tex> || <tex>0.0490\,</tex>  <tex>S_1,</tex><tex> S_1</tex> | 
| |- | |- | ||
| − | | EN || 0.0560  | + | | <tex>EN</tex> || <tex>0.0560\,</tex>  <tex> S_1, </tex> <tex>S_2</tex> || <tex>0.0896\,</tex>  <tex>S_1,</tex> <tex>S_2</tex> | 
| |- | |- | ||
| ! Итог | ! Итог | ||
| − | | 0.2394 || 0.2730 | + | | <tex>0.2394</tex> || <tex>0.2730</tex> | 
| |} | |} | ||
| </center><br /> | </center><br /> | ||
| − | Новая оценка для E, полученная из <tex> | + | Новая оценка для <tex>E</tex>, полученная из <tex>S_1</tex>, составляет <tex dpi="160">\dfrac{0.2394}{0.2730}</tex> <tex> = 0.8769</tex>. | 
| Благодаря этому, возможно рассчитать матрицу состояний: | Благодаря этому, возможно рассчитать матрицу состояний: | ||
| Строка 208: | Строка 208: | ||
| |- | |- | ||
| ! Состояние 1   | ! Состояние 1   | ||
| − | |0.3 || 0.7 | + | |<tex>0.3</tex> || <tex>0.7</tex> | 
| |- | |- | ||
| ! Состояние 2    | ! Состояние 2    | ||
| − | |0.8 || 0.2 | + | |<tex>0.8</tex> || <tex>0.2</tex> | 
| |} | |} | ||
| || | || | ||
| Строка 220: | Строка 220: | ||
| |- | |- | ||
| ! Состояние 1   | ! Состояние 1   | ||
| − | |0.0876 || 0.8769 | + | |<tex>0.0876</tex> || <tex>0.8769</tex> | 
| |- | |- | ||
| ! Состояние 2    | ! Состояние 2    | ||
| − | |1.0000 || 0.7385 | + | |<tex>1.0000</tex> ||<tex> 0.7385</tex> | 
| |} | |} | ||
| || | || | ||
| Строка 232: | Строка 232: | ||
| |- | |- | ||
| ! Состояние 1   | ! Состояние 1   | ||
| − | |0.0908 || 0.9092 | + | |<tex>0.0908</tex> || <tex>0.9092</tex> | 
| |- | |- | ||
| ! Состояние 2    | ! Состояние 2    | ||
| − | |0.5752 || 0.4248 | + | |<tex>0.5752</tex> || <tex>0.4248</tex> | 
| |} | |} | ||
| |} | |} | ||
| </center> | </center> | ||
| − | Для оценки начальной вероятности, мы предполагаем, что все последовательности начаты со скрытого состояния <tex> | + | Для оценки начальной вероятности, мы предполагаем, что все последовательности начаты со скрытого состояния <tex>S_1</tex> и рассчитаны с высокой вероятностью, а затем повторяем для <tex>S_2</tex>. После нормализации получаем обновленный исходный вектор. | 
| Повторяем эти шаги до тех пор, пока вероятности не сойдутся. | Повторяем эти шаги до тех пор, пока вероятности не сойдутся. | ||
Версия 15:11, 8 марта 2018
Алгоритм Баума-Велша (англ. Baum–Welch algorithm) — алгоритм для нахождения неизвестных параметров скрытой Марковской модели. Использует алгоритм прямого-обратного хода.
Содержание
История
Скрытые Марковские модели (HMMs) и алгоритм Баума-Велша впервые были описаны в заметках Леонарда Баума и его сверстников в конце . Одно из первых основных приложений на основе HMMs было использовано в области обработки речи. В HMMs стало эффективным инструментом в анализе биологических систем и информации, особенно в генном анализе.
Описание алгоритма
Пусть — это дискретная случайная переменная, принимающая одно из значений . Будем полагать, что данная модель Маркова, определенная как однородна по времени, то есть независима от . Тогда можно задать как независящую от времени стохастическую матрицу перемещений . Особый случай для времени определяется начальным распределением .
Будем считать, что мы в состоянии в момент времени , если . Последовательность заданных состояний определяется как , где является состоянием в момент времени .
Наблюдение может иметь одно из возможных значений, . Вероятность заданного вектора наблюдений в момент времени для состояния определяется как — это матрица на . Заданная последовательность наблюдений выражается как .
Следовательно, мы можем описать скрытую модель Маркова с помощью . При заданном векторе наблюдений алгоритм Баума-Велша находит . максимизирует вероятность наблюдений .
  
Исходные данные: со случайными начальными условиями. Алгоритм итеративно обновляет параметр до схождения в одной точке.
Прямая процедура
, что является вероятностью получения заданной последовательности для состояния в момент времени .
можно вычислить рекурсивно:
1.;
2..
Обратная процедура
Данная процедура позволяет вычислить вероятность конечной заданной последовательности при условии, что мы начали из исходного состояния , в момент времени .
можно вычислить рекурсивно:
1.;
2. .
Обновление переменных
Определим временные переменные:
.
Имея и , можно определить:
,
,
.
Используя новые переменные итерации продолжаются до схождения.
Пример
Предположим, у нас есть курица, с которой мы собираем яйца. Снесла ли курица яйца — зависит от некоторых неизвестных факторов. Для простоты предположим, что существуют лишь два состояния, которые определяют есть ли яйца. В начальный момент нам неизвестно текущее состояние, также нам неизвестна вероятность перехода из одного состояния в другое. Для начала возьмем произвольные матрицы переходов и состояний.
| 
 | 
 | 
 | 
Рассмотрим набор наблюдений ( — яйца отложены, — яйца не отложены): .
Следующим шагом оценим новую матрицу переходов:
| Последовательность | Вероятность последовательности и состояний | Наибольшая вероятность наблюдения | 
|---|---|---|
| Итог | 
Таким образом получаем новую оценку перехода из в , которая составляет . После этого можно подсчитать вероятность переходов из в , в , в и изменим их так, чтобы в суммы вероятностей давали . В итоге получаем новую матрицу переходов:
| 
 | 
 | 
 | 
Далее оценим новую матрицу состояний:
| Последовательности | Наибольшая вероятность наблюдения Если допустимо, что 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
