2015-06-11 17 views
6

Con questo codice:Confuso su X a GaussianHMM.fit ([X])

X = numpy.array(range(0,5)) 
model = GaussianHMM(n_components=3,covariance_type='full', n_iter=1000) 
model.fit([X]) 

vengo

tuple index out of range 
self.n_features = obs[0].shape[1] 

Allora, cosa si fa a passare .fit() esattamente? Gli stati nascosti E le emissioni in una tupla? Se sì in che ordine? La documentazione è meno che utile.

ho notato che piace essere passata tuple come questo non dà un errore:

X = numpy.column_stack([range(0,5),range(0,5)]) 
model = GaussianHMM(n_components=3,covariance_type='full', n_iter=1000) 
model.fit([X]) 

Edit:

Vorrei chiarire un po ', the documentation indica che l'ordinalità della matrice deve essere:

Questo quasi indica che si passa una tupla per ciascun campione che indica in modo binario quali sono le osservazioni presenti. Tuttavia their example indichi diversamente:

# pack diff and volume for training 
X = np.column_stack([diff, volume]) 

quindi la confusione

+0

io non sono troppo familiare con quella libreria, ma sembrerebbe che tu debba passare più informazioni al modello Markov, come le probabilità di inizio, la matrice di transizione, ecc. Hai visto il loro [esempio qui] (http://scikit-learn.org/stable/modules /hmm.html)? – CoryKramer

+0

[Ecco una domanda simile] (https://stackoverflow.com/questions/20619734/scikit-learn-gaussianhmm-valueerror-input-must-be-a-square-array). – CoryKramer

+1

@CoreyKramer Sì, ho visto il loro esempio, letto la loro documentazione e persino letto quel post che discute il fatto che devi passare una matrice di array/matrici numpy, non quello che indica ogni ordinamento delle matrici. – Brooks

risposta

1

Sembrerebbe la funzione GaussianHMM è per problemi multivariata emissioni sola HMM, qui la necessità di avere> 1 vettori di emissione. Quando la documentazione fa riferimento a 'n_features', non si riferiscono al numero di modi in cui le emissioni possono esprimersi, ma al numero di vettori di emissione ortogonali.

Quindi, "caratteristiche" (i vettori di emissione ortogonali) non devono essere confusi con i "simboli" che, nel linguaggio di sklearn (che è probabilmente condiviso con la comunità hmm più grande per quanto ne so), si riferiscono a ciò che è univoco valori che il sistema è in grado di emettere.

Per problemi univariati relativi al vettore delle emissioni, utilizzare MultinomialHMM.

Speranza che chiarisce per chiunque altro che vogliono usare questa roba senza diventare la principale autorità mondiale su HMM :)

0

mi rendo conto che è un vecchio thread, ma il problema nel codice di esempio è ancora lì. Credo che l'esempio è ora a this link e ancora dando lo stesso errore:

tuple index out of range 
self.n_features = obs[0].shape[1] 

La riga di codice è: model = GaussianHMM(n_components=5, covariance_type="diag", n_iter=1000).fit(X)

che dovrebbe essere: model = GaussianHMM(n_components=5, covariance_type="diag", n_iter=1000).fit([X])