как запустить скрытые модели Маркова в Python с помощью hmmlearn?
Я попытался использовать hmmlearn из GitHub для запуска бинарной скрытой марковской модели. Это не работает:
import hmmlearn.hmm as hmm
transmat = np.array([[0.7, 0.3],
[0.3, 0.7]])
emitmat = np.array([[0.9, 0.1],
[0.2, 0.8]])
obs = np.array([0, 0, 1, 0, 0])
startprob = np.array([0.5, 0.5])
h = hmm.MultinomialHMM(n_components=2, startprob=startprob,
transmat=transmat)
h.emissionprob_ = emitmat
# fails
h.fit([0, 0, 1, 0, 0])
# fails
h.decode([0, 0, 1, 0, 0])
print h
Я получаю эту ошибку:
ValueError: массивы нулевой размерности не могут быть объединены
Как правильно использовать этот модуль? Обратите внимание, что я использую версию hmmlearn, которая была отделена от sklearn, потому что, по-видимому, sklearn больше не поддерживает hmmlearn.
1 ответ:
Fit принимаетсписок последовательностей , а не одну последовательность (так как в общем случае вы можете иметь несколько независимых последовательностей, наблюдаемых из разных запусков ваших экспериментов/наблюдений). Таким образом, просто поместите свой список в другой список
import hmmlearn.hmm as hmm import numpy as np transmat = np.array([[0.7, 0.3], [0.3, 0.7]]) emitmat = np.array([[0.9, 0.1], [0.2, 0.8]]) startprob = np.array([0.5, 0.5]) h = hmm.MultinomialHMM(n_components=2, startprob=startprob, transmat=transmat) h.emissionprob_ = emitmat # works fine h.fit([[0, 0, 1, 0, 0]]) # h.fit([[0, 0, 1, 0, 0], [0, 0], [1,1,1]]) # this is the reason for such # syntax, you can fit to multiple # sequences print h.decode([0, 0, 1, 0, 0]) print h
Дает
(-4.125363362578882, array([1, 1, 1, 1, 1])) MultinomialHMM(algorithm='viterbi', init_params='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', n_components=2, n_iter=10, params='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', random_state=<mtrand.RandomState object at 0x7fe245ac7510>, startprob=None, startprob_prior=1.0, thresh=0.01, transmat=None, transmat_prior=1.0)