Скрытые модели Маркова (HMM)

Введение в скрытые модели Маркова (HMM)

hidden Markov model (HMM) является такой, в которой вы наблюдаете последовательность выбросов, но не знаете последовательности состояний, через которые прошла модель для генерации выбросов. Анализы скрытых марковских моделей стремятся восстановить последовательность состояний из наблюдаемых данных.

В качестве примера рассмотрим модель Маркова с двумя состояниями и шестью возможными выбросами. Модель использует:

  • Красная матрица, имеющая шесть сторон, обозначенная с 1 по 6.

  • Зеленая матрица, имеющая двенадцать сторон, пять из которых обозначены 2-6, в то время как остальные семь сторон обозначены 1.

  • Взвешенная красная монета, для которой вероятность голов равна 9, а вероятность хвостов равна .1.

  • Взвешенная зеленая монета, для которой вероятность голов составляет 95, а вероятность хвостов - .05.

Модель создает последовательность чисел из набора {1, 2, 3, 4, 5, 6} со следующими правилами:

  • Начните с того, что прокрутите красный штамп и записать номер, который появляется, который является эмиссией.

  • Бросьте красную монету и выполните одно из следующих действий:

    • Если результатом являются головки, прокрутите красный штамп и запишите результат.

    • Если результатом являются хвосты, прокрутите зеленую матрицу и запишите результат.

  • На каждом последующем шаге вы переворачиваете монету, которая имеет тот же цвет, что и матрица, которую вы прокатили на предыдущем шаге. Если монета поднимается, прокатывайте ту же штамп, что и на предыдущем шаге. Если у монеты появляются хвосты, переключитесь на другую головку.

Диаграмма состояний для этой модели имеет два состояния, красный и зеленый, как показано на следующем рисунке.

Вы определяете излучение от состояния путем прокатки матрицы с тем же цветом, что и состояние. Вы определяете переход к следующему состоянию, переворачивая монету с тем же цветом, что и состояние.

Матрица переходов:

T=[0.90.050.10.95]

Матрица выбросов:

E=[161616161616712112112112112112]

Модель не скрыта, потому что вы знаете последовательность состояний из цветов монет и dice. Предположим, однако, что кто-то другой генерирует выбросы, не показывая вам dice или монеты. Все, что вы видите, это последовательность выбросов. Если вы начинаете видеть больше 1с, чем другие числа, вы можете подозревать, что модель находится в зеленом состоянии, но вы не можете быть уверены, потому что не можете увидеть цвет прокатки матрицы.

Скрытые модели Маркова вызывают следующие вопросы:

  • Учитывая последовательность выбросов, каков наиболее вероятный путь состояния?

  • Учитывая последовательность выбросов, как вы можете оценить вероятности перехода и выбросов модели?

  • Какова прямая вероятность того, что модель генерирует заданную последовательность?

  • Какова апостериорная вероятность того, что модель находится в конкретном состоянии в любой точке последовательности?

Анализ скрытых марковских моделей

Функции Statistics and Machine Learning Toolbox™, связанные со скрытыми марковскими моделями:

  • hmmgenerate - Генерирует последовательность состояний и выбросов из марковской модели

  • hmmestimate - Вычисляет максимальные оценки вероятности перехода и вероятностей выбросов из последовательности выбросов и известной последовательности состояний

  • hmmtrain - Вычисляет максимальные оценки вероятности перехода и вероятностей выбросов из последовательности выбросов

  • hmmviterbi - Вычисляет наиболее вероятный путь состояния для скрытой модели Маркова

  • hmmdecode - Вычисляет апостериорные вероятности состояния последовательности выбросов

В этом разделе показано, как использовать эти функции для анализа скрытых марковских моделей.

Генерация тестовой последовательности

Следующие команды создают матрицы перехода и излучения для модели, описанной во Введении к скрытым марковским моделям (HMM):

TRANS = [.9 .1; .05 .95];

EMIS = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6;...
7/12, 1/12, 1/12, 1/12, 1/12, 1/12];

Чтобы сгенерировать случайную последовательность состояний и выбросов из модели, используйте hmmgenerate:

[seq,states] = hmmgenerate(1000,TRANS,EMIS);

Область выхода seq - последовательность выбросов и выход states - последовательность состояний.

hmmgenerate начинается в состоянии 1 на шаге 0, выполняет переход к состоянию i 1 на шаге 1 и возвращается i 1 как первая запись на states. Для изменения начального состояния смотрите Изменение начального распределения состояний.

Оценка последовательности состояний

Учитывая матрицы переходов и выбросов TRANS и EMIS, функцию hmmviterbi использует алгоритм Viterbi, чтобы вычислить наиболее вероятную последовательность состояний, через которые будет проходить модель, чтобы сгенерировать заданную последовательность seq выбросов:

likelystates = hmmviterbi(seq, TRANS, EMIS);

likelystates - последовательность такой же длины, как и seq.

Чтобы проверить точность hmmviterbi, вычислите процент фактической последовательности states что согласуется с последовательностью likelystates.

sum(states==likelystates)/1000
ans =
   0.8200

В этом случае наиболее вероятная последовательность состояний согласуется со случайной последовательностью 82% времени.

Оценка матриц переходов и выбросов

Функции hmmestimate и hmmtrain оценить матрицы переходов и выбросов TRANS и EMIS задается последовательность seq выбросов.

Используя hmmestimate.  Функция hmmestimate требует, чтобы вы знали последовательность состояний states через которую прошла модель, чтобы сгенерировать seq.

Ниже взяты последовательности выбросов и состояний и возвращаются оценки матриц переходов и выбросов:

[TRANS_EST, EMIS_EST] = hmmestimate(seq, states)

TRANS_EST =
0.8989    0.1011
0.0585    0.9415

EMIS_EST =
0.1721    0.1721    0.1749    0.1612    0.1803    0.1393
0.5836    0.0741    0.0804    0.0789    0.0726    0.1104

Можно сравнить выходы с исходными матрицами переходов и выбросов, TRANS и EMIS:

TRANS
TRANS =
0.9000    0.1000
0.0500    0.9500

EMIS
EMIS =
0.1667    0.1667    0.1667    0.1667    0.1667    0.1667
0.5833    0.0833    0.0833    0.0833    0.0833    0.0833

Используя hmmtrain.  Если вы не знаете последовательности состояний statesНо у вас есть начальные догадки для TRANS и EMIS, вы все еще можете оценить TRANS и EMIS использование hmmtrain.

Предположим, у вас есть следующие начальные предположения для TRANS и EMIS.

TRANS_GUESS = [.85 .15; .1 .9];
EMIS_GUESS = [.17 .16 .17 .16 .17 .17;.6 .08 .08 .08 .08 08];

Вы оцениваете TRANS и EMIS следующим образом:

[TRANS_EST2, EMIS_EST2] = hmmtrain(seq, TRANS_GUESS, EMIS_GUESS)

TRANS_EST2 =
0.2286    0.7714
0.0032    0.9968

EMIS_EST2 =
0.1436    0.2348    0.1837    0.1963    0.2350    0.0066
0.4355    0.1089    0.1144    0.1082    0.1109    0.1220

hmmtrain использует итерационный алгоритм, который изменяет матрицы TRANS_GUESS и EMIS_GUESS так что на каждом шаге скорректированные матрицы с большей вероятностью генерируют наблюдаемую последовательность, seq. Алгоритм останавливается, когда матрицы в двух последовательных итерациях находятся в пределах небольшого допуска друг к другу.

Если алгоритм не может достичь этого допуска в пределах максимального количества итераций, значение по умолчанию которого 100алгоритм останавливается. В этом случае hmmtrain возвращает последние значения TRANS_EST и EMIS_EST и выдает предупреждение о том, что допуск не была достигаем.

Если алгоритму не удается достичь желаемого допуска, увеличьте значение по умолчанию максимального количества итераций с помощью команды:

hmmtrain(seq,TRANS_GUESS,EMIS_GUESS,'maxiterations',maxiter)

где maxiter - максимальное количество шагов, выполняемых алгоритмом.

Измените значение допуска по умолчанию с помощью команды:

hmmtrain(seq, TRANS_GUESS, EMIS_GUESS, 'tolerance', tol)

где tol - желаемое значение допуска. Увеличение значения tol останавливает алгоритм раньше, но результаты менее точны.

Два фактора снижают надежность выходных матриц hmmtrain:

  • Алгоритм сходится к локальному максимуму, который не представляет истинные матрицы перехода и излучения. Если вы подозреваете это, используйте различные начальные догадки для матриц TRANS_EST и EMIS_EST.

  • Последовательность seq может быть слишком коротким, чтобы правильно обучить матрицы. Если вы подозреваете это, используйте более длинную последовательность для seq.

Оценка апостериорных вероятностей состояния

Апостериорные вероятности последовательности выбросов seq являются ли условные вероятности того, что модель находится в конкретном состоянии, когда она генерирует символ в seq, учитывая, что seq излучается. Вы вычисляете апостериорные вероятности состояния с hmmdecode:

PSTATES = hmmdecode(seq,TRANS,EMIS)

Область выхода PSTATES является M -by - L матрицей, где M - количество состояний и L - длина seq. PSTATES(i,j) - условная вероятность того, что модель находится в состоянии i когда он генерирует j1й символ seq, учитывая, что seq излучается.

hmmdecode начинается с модели в состоянии 1 на шаге 0, перед первым выбросом. PSTATES(i,1) - вероятность того, что модель находится в состоянии i на следующем шаге 1. Для изменения начального состояния смотрите Изменение начального распределения состояний.

Чтобы вернуть логарифм вероятности последовательности seq, используйте второй выходной аргумент hmmdecode:

[PSTATES,logpseq] = hmmdecode(seq,TRANS,EMIS)

Вероятность последовательности стремится к 0, когда длина последовательности увеличивается, и вероятность достаточно длинной последовательности становится меньше, чем наименьшее положительное число, которое может представлять ваш компьютер. hmmdecode возвращает логарифм вероятности избежать этой проблемы.

Изменение начального распределения состояний

По умолчанию Statistics and Machine Learning Toolbox скрытые функции модели Маркова начинаются в состоянии 1. Другими словами, распределение начальных состояний имеет всю свою массу вероятностей, сконцентрированную в состоянии 1. Чтобы назначить другое распределение вероятностей, p = [<reservedrangesplaceholder4> 1, <reservedrangesplaceholder3> 2..., <reservedrangesplaceholder2> <reservedrangesplaceholder1>], к M начальным состояниям, делают следующее:

  1. Создайте M + 1-by- M + 1 дополненную матрицу перехода,T^ следующей формы:

    T^=[0p0T]

    где T - истинная матрица перехода. Первый столбец T^ содержит M + 1 нули. p должна быть равной 1.

  2. Создайте M + 1-бай- N дополненную матрицу выбросов,E^, которая имеет следующую форму:

    E^=[0E]

Если матрицы переходов и выбросов TRANS и EMISсоответственно, дополненные матрицы создаются следующими командами:

TRANS_HAT = [0 p; zeros(size(TRANS,1),1) TRANS];

EMIS_HAT = [zeros(1,size(EMIS,2)); EMIS];

См. также

| | | |

Похожие темы