Проблема в обучении скрытой марковской модели и использование для классификации - PullRequest
17 голосов
/ 16 марта 2012

Мне трудно разобраться, как использовать набор инструментов Кевина Мерфи HMM Набор инструментов .Было бы очень полезно, если бы кто-то, кто имеет опыт работы с ним, мог бы прояснить некоторые концептуальные вопросы.Я как-то понял теорию, лежащую в основе HMM, но сбивает с толку, как на самом деле реализовать ее и упомянуть все настройки параметров.

Есть 2 класса, поэтому нам нужно 2 HMM.Предположим, что обучающими векторами являются: class1 O1 = {4 3 5 1 2} и class O_2 = {1 4 3 2 4}.Теперь система должна классифицировать неизвестную последовательность O3 = {1 3 2 4 4} как class1 или class2.

  1. Что пойдет в obsmat0 и obsmat1?
  2. Как указать / синтаксис для вероятности перехода transmat0 и transmat1?
  3. для чего нужны переменные данныебыть в этом случае?
  4. Будет ли число состояний Q = 5, поскольку используются пять уникальных чисел / символов?
  5. Количество выходных символов = 5?
  6. Как сделатьЯ упоминаю вероятности перехода transmat0 и transmat1?

Ответы [ 2 ]

36 голосов
/ 18 марта 2012

Вместо ответа на каждый отдельный вопрос позвольте мне проиллюстрировать, как использовать набор инструментов HMM с примером - пример погоды , который обычно используется при представлении скрытых марковских моделей.

В основном состояния модели представляют собой три возможных типа погоды: солнечная, дождливая и туманная.В любой день мы предполагаем, что погода может быть только одним из этих значений.Таким образом, набор состояний HMM:

S = {sunny, rainy, foggy}

Однако в этом примере мы не можем наблюдать погоду напрямую (очевидно, мы заперты в подвале!).Вместо этого у нас есть единственное доказательство: носит ли человек, который проверяет вас каждый день, зонтик или нет.В терминологии HMM это дискретные наблюдения:

x = {umbrella, no umbrella}

Модель HMM характеризуется тремя вещами:

  • Априорные вероятности: вектор вероятностей нахождения в первом состояниипоследовательности.
  • Вероятность перехода: матрица, описывающая вероятности перехода из одного состояния погоды в другое.
  • Вероятность выброса: матрица, описывающая вероятности наблюдения за выходом (зонтик или нет) дано состояние (погода).

Далее нам либо даны эти вероятности, либо мы должны изучить их из учебного набора.Как только это будет сделано, мы можем провести рассуждение, например, вычислить вероятность последовательности наблюдений относительно модели HMM (или группы моделей и выбрать наиболее вероятную) ...

1) известных параметров модели

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

Q = 3;    %# number of states (sun,rain,fog)
O = 2;    %# number of discrete observations (umbrella, no umbrella)

%#  prior probabilities
prior = [1 0 0];

%# state transition matrix (1: sun, 2: rain, 3:fog)
A = [0.8 0.05 0.15; 0.2 0.6 0.2; 0.2 0.3 0.5];

%# observation emission matrix (1: umbrella, 2: no umbrella)
B = [0.1 0.9; 0.8 0.2; 0.3 0.7];

Затем мы можем отобрать несколько последовательностей из этой модели:

num = 20;           %# 20 sequences
T = 10;             %# each of length 10 (days)
[seqs,states] = dhmm_sample(prior, A, B, num, T);

например, 5-й пример:

>> seqs(5,:)        %# observation sequence
ans =
     2     2     1     2     1     1     1     2     2     2

>> states(5,:)      %# hidden states sequence
ans =
     1     1     1     3     2     2     2     1     1     1

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

dhmm_logprob(seqs(5,:), prior, A, B)

dhmm_logprob_path(prior, A, B, states(5,:))

или вычислить путь Витерби (наиболее вероятная последовательность состояний):

vPath = viterbi_path(prior, A, multinomial_prob(seqs(5,:),B))

5th_example

2) неизвестные параметры модели

Обучение выполняется с использованием алгоритма EM и лучше всего выполняется с набором последовательностей наблюдений.

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

%# we start with a randomly initialized model
prior_hat = normalise(rand(Q,1));
A_hat = mk_stochastic(rand(Q,Q));
B_hat = mk_stochastic(rand(Q,O));  

%# learn from data by performing many iterations of EM
[LL,prior_hat,A_hat,B_hat] = dhmm_em(seqs, prior_hat,A_hat,B_hat, 'max_iter',50);

%# plot learning curve
plot(LL), xlabel('iterations'), ylabel('log likelihood'), grid on

log_likelihood

Имейте в виду, что порядок штатов не имеетчтобы соответствовать.Вот почему нам нужно переставить состояния, прежде чем сравнивать две модели.В этом примере обученная модель выглядит близко к исходной:

>> p = [2 3 1];              %# states permutation

>> prior, prior_hat(p)
prior =
     1     0     0
ans =
      0.97401
  7.5499e-005
      0.02591

>> A, A_hat(p,p)
A =
          0.8         0.05         0.15
          0.2          0.6          0.2
          0.2          0.3          0.5
ans =
      0.75967      0.05898      0.18135
     0.037482      0.77118      0.19134
      0.22003      0.53381      0.24616

>> B, B_hat(p,[1 2])
B =
          0.1          0.9
          0.8          0.2
          0.3          0.7
ans =
      0.11237      0.88763
      0.72839      0.27161
      0.25889      0.74111

Есть еще несколько вещей, которые вы можете сделать со скрытыми марковскими моделями, например классификация или распознавание образов.У вас будут разные наборы последовательностей обервации, принадлежащих разным классам.Вы начинаете с тренировки модели для каждого набора.Затем, учитывая новую последовательность наблюдений, вы можете классифицировать ее, вычисляя ее вероятность по каждой модели, и прогнозировать модель с наибольшим логарифмическим правдоподобием.

argmax[ log P(X|model_i) ] over all model_i
1 голос
/ 16 марта 2012

Я не использую набор инструментов, который вы упоминаете, но я использую HTK.Есть книга, которая очень четко описывает функцию HTK, доступна бесплатно

http://htk.eng.cam.ac.uk/docs/docs.shtml

Вводные главы могут помочь вам понять.

Я могу быстропопытаться ответить # 4 в вашем списке.,,Количество излучающих состояний связано с длиной и сложностью ваших векторов объектов.Тем не менее, он, безусловно, не должен равняться длине массива векторов признаков, поскольку каждое излучающее состояние может иметь вероятность перехода обратно в себя или даже назад в предыдущее состояние в зависимости от архитектуры.Я также не уверен, что значение, которое вы даете, включает в себя неизлучающие состояния в начале и в конце хм, но это также необходимо учитывать.Выбор количества состояний часто сводится к методу проб и ошибок.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...