Использование граната: как генерировать вероятности в скрытой марковской модели - PullRequest
0 голосов
/ 02 июня 2018

Для обучения модели HMM мне нужны начальные вероятности (pi), вероятности перехода и вероятности выбросов.Теперь я хочу обучить модель HMM с 3 состояниями (1,2,3) и 4 выходами (a, b, c, d).Обучающие данные:

[[abcdabcdabcdabcdabcdbacbacd,abababcdcdcdcdababab,badcacdabacdbbacd,dacdbacdbbccaaadacdbabd,cababcacdbacacdbdacdacdbacdbab,acddbaacbdcaabdcbabd,cdbadcbacdbbdacdbcdaaabd,bcadabbacbacdbdacddb]]

Я пытаюсь использовать гранат для этого, но в примере все состояния имеют вероятности, указанные следующим образом:

rainy = State( DiscreteDistribution({ 
    'walk': 0.1, 'shop': 0.4, 'clean': 0.5 }),
    name='Rainy' )
sunny = State( DiscreteDistribution({ 
    'walk': 0.6, 'shop': 0.3, 'clean': 0.1 }), 
    name='Sunny' )`

Моя проблема в том, как получить вероятности.Я пытаюсь использовать метод граната model.add_transition(), но я не знаю, какой параметр я должен дать?Есть ли пример, который может научить меня, как получить вероятность в моих данных?

Ответы [ 2 ]

0 голосов
/ 25 июля 2018

Если вы не знаете параметров нужной модели, т.е. хотите использовать модель для изучения этих параметров, то в неконтролируемой настройке вы можете использовать функцию fit() из граната. model = HiddenMarkovModel() #create reference model.fit(sequences, algorithm='baum-welch') # let model fit to the data model.bake() #finalize the model (Примечание: убедитесь, что каждая последовательность, которую вы вводите, является списком или массивом пустых значений)

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

  1. Чтобы получить матрицу вероятности перехода:

    model.dense_transition_matrix()

  2. Чтобы получить распределения выбросов:

    print(model)

  3. Тогда, если вы хотите использовать модель для генерации образцов:

    model.sample(length=10)

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

    custom_model = HiddenMarkovModel.from_matrix(transition_matrix, distributions, start_probs, end_probs)

Гранат документы является лучшим источником информации о каждой из этих функций.

0 голосов
/ 03 июня 2018

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

...