инициализировать объект HiddenMarkovModelTrainer - PullRequest
2 голосов
/ 20 января 2012

Я делаю распознавание жестов в python, и одна из наиболее полных библиотек, которая может управлять скрытой моделью Маркова, - это nltk . Но есть кое-что, чего я не могу понять.

Прежде всего, данные. У меня есть координаты жеста, и я сгруппировал их в 8 кластеров (с помощью k-средних). так что это моя структура жестов:

raw coordinates x,y: [[123,16], [120,16], [115,16], [111,16], [107,16], [103,17], ...]

centroids x,y : [[ 132.375        56.625     ]
                 [ 122.45454545   30.09090909]
                 [  70.5          27.33333333]
                 ...]

labels: [5 6 6 6 6 6 6 2 2 2 2 2 2 4 4 4 ...]

Теперь я хочу тренировать HMM с Баумом-Уэлчем с моим. Так что HiddenMarkovModelTrainer - это мой класс.

Я нашел в интернете еще несколько реализаций baum welch, но только в Matlab. Реализация этого алгоритма, как правило, требует ввода:

baum-welch(X, alphabet, H)

где - X это данные для поезда (в моем случае - метки) - алфавит возможных значений данных (в моем случае - 0,1,2,3,4,5,6,7) - H количество скрытых состояний

Теперь я запутался, потому что в конструкторе ntlk.HiddenMarkovModelTrainer мне нужно дать состояний и символов , и я не знаю, какими они должны быть, учитывая, что данные для обучения X является следствием метода HiddenMarkovModelTrainer.train_unsupervised (), я считаю, что мой алфавит является символом ... я не знаю, что помещать в состояния.

Надеюсь, мои объяснения понятны, даже если мой английский плохой.

1 Ответ

4 голосов
/ 21 января 2012

Скрытые марковские модели называются так, потому что их действительные состояния не наблюдаемы; вместо этого государства производят наблюдение с определенной вероятностью. Классическое использование HMM в NLTK - это POS-теги, где наблюдения - это слова, а скрытые внутренние состояния - POS-теги. Посмотрите на этот пример , чтобы понять, что означают параметры states и symbols в этом случае.

Для распознавания жестов с помощью HMM наблюдения представляют собой временные последовательности некоторого вида моделирования объектов (symbols) геометрических входных данных - в вашем случае вы используете кластеризацию (также называемую "зонированием" - см. Раздел 3.2 этой статьи («Ян, Сюй. Скрытая марковская модель для распознавания жестов») для некоторых других возможных моделей). Насколько я понимаю, множество внутренних состояний не имеет какой-либо значимой интерпретации. Количество внутренних состояний, используемых при обучении НММ для каждого жеста, является просто параметром, с которым необходимо экспериментировать. Например, см. в этом документе («Ямато, Ойя, Исии. Распознавание действий человека в последовательных по времени изображениях с использованием НММ») - число состояний установлено на 36, что критикуется как слишком высокое в этой магистерской диссертации , просто чтобы привести пример того, что это модифицируемый параметр.

Так что я бы попробовал это с этим кодом:

observed_sequence = [5, 6, 6, 6, 6, 6, 6, 2, 2, 2, 2, 2, 2, 4, 4, 4]
states = range(20) # experiment with this number
symbols = set(observed_clusters)
trainer = HiddenMarkovModelTrainer(states, symbols)
model = trainer.train_unsupervised([observed_sequence])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...