2013-03-12 10 views
6

Sono nuovo al modello di Markov nascosto. Capisco l'idea principale e ho provato alcune funzioni HMM integrate Matlab per aiutarmi a capire di più.Hidden Markov Model Multiple Observation values ​​per ogni stato

Se si dispone di una sequenza di osservazioni e stati corrispondenti, ad es.

seq = 2  6  6  1  4  1  1  1  5  4 
states = 1  1  2  2  2  2  2  2  2  2 

e posso usare hmmestimate funzione per calcolare matrici di transizione e probabilità di emissione:

[TRANS_EST, EMIS_EST] = hmmestimate(seq, states) 

TRANS_EST =

0.5000 0.5000 
    0 1.0000 

EMIS_EST =

 0 0.5000   0   0   0 0.5000 
0.5000   0   0 0.2500 0.1250 0.1250 

Nell'esempio, l'osservazione è solo un valore singolo.

La seguente immagine di esempio descrive la mia situazione. My situation Se ho stati: {Sonno, lavoro, sport}, e ho una serie di osservazioni: {lightoff, luce accesa, frequenza cardiaca> 100 .....} Se uso il numero per rappresentare ogni osservazione, nella mia situazione ogni stato ha molteplici osservazioni, allo stesso tempo,

seq = {2,3,5}  {6,1}  {2}  {2,3,6}  {4}  {1,2}  {1}  
states = 1    1  2   2   2  2  2  

non ho idea di come implementare questo in Matlab per ottenere matrice di probabilità di transizione e di emissione. Sono abbastanza perso, cosa dovrei fare nel prossimo passo? Sto usando l'approccio giusto?

Grazie!

+0

Hi leon, sto lavorando su un problema simile. Hai trovato una soluzione a questo? Ho cercato a lungo, ma non ho nemmeno trovato un documento o un esempio di implementazione per verificare che avere più variabili di osservazione sia possibile con gli HMM.Da quanto ho capito, è possibile avere più sequenze di osservazione (della stessa variabile) ma non sono sicuro di quale sia la situazione se le sequenze appartengono effettivamente a variabili diverse. – Rhubarb

+0

Ciao Berkan, HMM non è adatto a questo problema. Sto esaminando altre opzioni – leon

+0

Ho appena inviato un messaggio sul tuo blog. Puoi approfondire il motivo per cui pensi che HMM non sia adatto a questo? Ho letto questo argomento per una settimana e come accennato non sono ancora abbastanza sicuro sull'argomento. Presumo che tu abbia osservato il problema più a lungo di me quindi qualsiasi suggerimento o spiegazione (sul perché non è possibile) sarebbe immensamente gradito. – Rhubarb

risposta

3

Se si conosce la sequenza dello stato nascosto, la stima di massima probabilità è banale: è il conteggio empirico normalizzato. In altre parole, conta le transizioni e le emissioni e poi divide gli elementi in ogni riga per i conteggi totali di quella riga.

Nel caso in cui si dispongano di più variabili di osservazione, codificare le osservazioni come un vettore in cui ogni elemento fornisce il valore di una delle variabili casuali in quella fase temporale, ad es. '{luci = 1, computer = 0, frequenza cardiaca> 100 = 1, posizione = 0}'. La chiave è che è necessario avere lo stesso numero di osservazioni ad ogni passo temporale, altrimenti le cose saranno molto più difficili.

+0

grazie per la tua risposta, non so come mettere il vettore in matlab hmmestimate function? – leon

+0

Non è possibile utilizzare hmmestimate per questo, ma si potrebbe facilmente scrivere un ciclo for che scorre su ogni stato e conta le transizioni e le emissioni in uscita e quindi la normalizzazione. – jerad

1

Penso che tu abbia due opzioni. 1) codifica più osservazioni in un numero. Ad esempio, se sai che il massimo valore possibile per l'osservazione è N, e in ogni stato puoi avere al massimo osservazioni K, quindi puoi codificare qualsiasi combinazione di osservazioni come un numero compreso tra 0 e N^K - 1. Di facendo questo, stai assumendo che {2,3,6} e {2,3,5} non condividano nulla, sono due osservazioni completamente diverse. 2) O si possono avere più distribuzioni di emissione per ogni stato. Non ho usato le funzioni built-in in MATLAB per la stima HMM, quindi non ho idea se lo supporta o no. Ma l'idea è che se si dispone di più distribuzioni di emissione in uno stato, la probabilità di emissione è solo il prodotto di esse. Questo è ciò che suggerisce jerad.