2015-08-21 2 views
3

J'ai deux ensembles d'apprentissage (observations de classe connue) représentant les deux états possibles dans mes données. Je voudrais avoir hmmlearn estimer le début, la transition , et les probabilités d'émission de ces deux ensembles d'entraînement.Formation hmmlearn HMM avec plusieurs classes de séquence d'observation

Mes données sont une liste de valeurs comprises entre 0 et 1. J'ai déjà divisé les données en groupes grossiers «A» et «B» en utilisant un seuil prudent. Je veux utiliser un HMM pour affiner les points auxquels mes données changent d'état.

Pour une seule séquence train/test de X que je ferais ceci:

X = [0, 1, 1, 1, 0.1, 0.015, 0.01, 0.001, 0.005, 0.001, 0.2, 1, 0.8, 1, 1, 0.3] 
states = ["A", "B"] 

#Fit model, auto set probabilities 
model = hmm.MultinomialHMM(n_components=2, covariance_type="full") 
model.fit([X]) 

#Predict states 
Z = model.predict(X) 

#Predict a sequence of hidden states based on visible states 
logprob, state = model.decode(X, algorithm="viterbi") 
print "States:", ", ".join(map(lambda x: states[x], state)) 
>>> States: A, B, B, B, B, A, A, A, A, A, B, B, B, B, B, B 

Je voudrais savoir comment former l'état A et l'état B séparément.

Répondre

0

La méthode d'ajustement prend une liste de séquences d'observation. Dans votre exemple, supposons que votre X est notée X1, et l'autre groupe désigné X2, vous auriez simplement courir:

model.fit([X1,X2]) 
+4

Juste pour être complet: cela ne fonctionnera pas dans 'hmmlearn' 0.2.0. Voir "Travailler avec plusieurs séquences" dans le [tutoriel] (http://hmmlearn.readthedocs.org/en/latest/tutorial.html#training-hmm-parameters-and-inferring-the-hidden-states). –