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

Проблема в обучении скрытой марковской модели и использование для классификации

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

Есть 2 класса, поэтому нам нужно 2 HMM.

Пусть говорят, что векторы обучения: class1 O1 = {4 3 5 1 2} и класс O_2 = {1 4 3 2 4}.

Теперь система должна классифицировать неизвестную последовательность O3 = {1 3 2 4 4} как class1 или class2.

  • Что будет в obsmat0 и obsmat1?
  • Как указать/синтаксис для вероятности перехода transmat0 и transmat1?
  • какими будут переменные данные в этом случае?
  • Будет ли число состояний Q = 5, так как используется пять уникальных чисел/символов?
  • Количество выходных символов = 5?
  • Как я упоминаю вероятности переходов transmat0 и transmat1?
4b9b3361

Ответ 1

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

В основном состояния модели - три возможных типа погоды: солнечный, дождливый и туманный. В любой день мы предполагаем, что погода может быть только одним из этих значений. Таким образом, множество состояний 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);

например, пятый пример:

>> 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) неизвестные параметры модели

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

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

%# 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

Ответ 2

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

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

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

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

Удачи!