Результат скрытой Марковской модели (декодирование) меняется каждый раз

#python #hmmlearn

#python #hmmlearn

Вопрос:

Я использую HMM для прогнозирования поведения людей. Скрытые состояния — это отдых, прогулка, еда, а наблюдения — внутри, снаружи и перекус соответственно.

 hState = ['Rset', 'Walk', 'Eat']
Obs =  ['Inside 1', 'Outside 2', 'Snack 3']
order = [1, 2, 1, 2, 3 ,2, 2, 3, 1, 2 ,2, 2, 1, 2]
no = 3
sProb = np.array([0.1, 0.8, 0.1])
tProb = np.array([[0.2, 0.2, 0.6], 
                     [0.1, 0.8, 0.1], 
                     [0.6, 0.1, 0.3]])
eProb = np.array([[0.7, 0.2, 0.1],  
                    [0.1, 0.6, 0.3],
                    [0.2, 0.3, 0.5]])
h = hmm.MultinomialHMM(3, "full", sProb, tProb)
h.emissionprob_ = eProb
oreder1 = np.array([order]).T
result= hmm.GaussianHMM(n_components=no).fit(oreder1)
result.predict(oreder1)
  

Но результат меняется всякий раз, когда я снова запускаю код. Последовательности результата верны, но идентификатор скрытого состояния изменен
Результат первого запуска

 array([2, 1, 2, 1, 0, 1, 1, 0, 2, 1, 1, 1, 2, 1])
  

Результат второго временного запуска

 array([0, 1, 0, 1, 2, 1, 1, 2, 0, 1, 1, 1, 0, 1])
  

Что я хочу знать, так это как я могу получить постоянное значение для каждого запуска или как доработать модель. Заранее благодарю вас за ваш ответ.

Комментарии:

1. Вместо того, чтобы делиться скриншотом вашего кода, включите код в свой вопрос в виде блока кода.

2. Я отредактировал и загрузил код

Ответ №1:

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

Если вы хотите, чтобы при каждом запуске использовалась одна и та же последовательность случайных чисел, вам нужно установить случайное число «seed». Посмотрите в hmm документации, как установить начальное значение. Установка его в фиксированное значение гарантирует, что при каждом выполнении используется одна и та же серия случайных чисел и должны приводить к идентичным результатам для каждого запуска.

Вопрос о завершении модели выходит за рамки этого сайта. По сути, вам нужно будет узнать о HMM, о том, как они работают, какие предположения они делают, и как ваш вариант использования соответствует (или не соответствует!) Этим предположениям. Затем вы используете свое лучшее суждение в сочетании с тщательным тестированием / обучением для определения окончательной параметризации.

Комментарии:

1. Спасибо, это работает. Еще один небольшой вопрос, знаете ли вы, как предсказать следующее скрытое состояние, применяя этот же код

2. @Yash — это то, что вам нужно будет прочитать. 😉

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