3

Я попытался использовать hmmlearn from GitHub для запуска двоичной скрытой марковской модели. Это не работает:Как запустить скрытые марковские модели в Python с hmmlearn?

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: zero-dimensional arrays cannot be concatenated

Что такое правильный способ использовать этот модуль? Примечание. Я использую версию hmmlearn, которая была отделена от sklearn, потому что, очевидно, sklearn больше не поддерживает hmmlearn.

+0

Obs, вероятно, следует быть Numpy массив? – Romain

+0

@Romain: обновленный код - та же ошибка с общением, являющимся массивом – lgd

ответ

4

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) 
+2

Только для записи: это справедливо только для 'sklearn.hmm' и версии 0.1.0' hmmlearn'. Начиная с версии 0.2.0 'hmmlearn' использует другой API, для получения подробной информации см. [Docs] (http://hmmlearn.readthedocs.org/en/latest/api.html#hmmlearn.base._BaseHMM.fit). –

 Смежные вопросы

  • Нет связанных вопросов^_^