Domanda

Ho appena cominciato a leggere di più su Generatori di Markov Chain oggi, e sono veramente incuriosito da tutto il processo di costruzione di uno. Dalla mia comprensione, lo stato futuro dipende dalle stati passati statistici al presente.

Esempio:

  

Ciao a tutti. Ciao Dolly. Ciao mondo.

     

"Mondo" segue "Ciao" ~ 66% del tempo in quella fonte.

Se questo è sempre il caso, come allora si fa a evitare di mettere fuori gli stessi risultati ogni volta? Le statistiche-occorrenze non cambiano con una stringa statica, quindi ho ragione di ritenere che non saranno le varianti di ogni essere generati, a meno che l'origine dei dati viene modificato in qualche modo?

Come potrei ottenere variazioni da uno statico-source, considerando i valori statistici, ma che consente una certa flessibilità? Usando il mio esempio di cui sopra, come faccio a consentire il mio generatore di seguire "Ciao" con "Dolly", quando "Dolly" segue solo "Ciao" 33% del tempo?

Credo che quello che sto chiedendo è, come faccio a basare la probabilità di mia selezione successiva sulla presenza statistica delle parole che seguono mia selezione presente? In questo modo, "Dolly" si presenta il 33% del tempo, e "Mondo" si presenta il 66% del tempo -? O sto completamente perso qui

È stato utile?

Soluzione

Si utilizza un generatore di numeri casuali per scegliere quale percorso si scende. Devi salvare ogni stato (che in realtà è una storia di N elementi precedenti) e le probabilità per quello stato. Poi si sceglie un numero a caso e decidere sulla base di esso ciò che il prossimo stato si transizione verso è.

Nel tuo esempio si dispone di una catena di Markov con un N 1 si avrebbe una struttura a catena che sembrava qualcosa di simile:

<start> -> Hello : 1.0

Hello -> World. : 0.66666
Hello -> Dolly. : 0.33333

Dolly. -> Hello : 1.0

World. -> <end> : 0.5
World. -> Hello : 0.5

Se il vostro stato attuale è Ciao, quindi il prossimo stati possibili sono Mondiale. e Dolly .. generare un numero casuale compreso tra 0 e 1 e scegliere mondiale. se si tratta di meno di 0,666,666 mila, altrimenti scegliete Dolly.

Con una catena di N = 2 Markov, si ottiene un comportamento quasi deterministico con quello di ingresso:

<start> <start> -> <start> Hello : 1.0

<start> Hello -> Hello World. : 1.0

Hello World. -> World. Hello : 0.5
Hello World. -> World. <end> : 0.5

World. Hello -> Hello Dolly. : 1.0

Hello Dolly. -> Dolly. Hello : 1.0

Dolly. Hello -> Hello World. : 1.0

Altri suggerimenti

Due commenti:

1) Per generare campioni provenienti da un processo casuale, se una certa scelta è piuttosto (> 50%) probabilità, e altri meno, richiede solo una ponderata "coin flip": generare un numero reale casuale uniformemente su [ 0,1), e considerare le possibilità nello stesso ordine fisso, mantenendo una somma delle probabilità finora. Non appena tale somma supera il numero scelto a caso, selezionare quella scelta. Se le vostre scelte hanno normalizzato (non sommando a 1) probabilità, è necessario prima di calcolare la somma delle probabilità s, e sia li divide per s, oppure scegli il tuo numero casuale su [0, s)

2) Per evitare overfitting per calcolare il modello da una piccola quantità di dati di allenamento del campione (rispetto al numero di parametri), utilizzare priori bayesiani sui parametri del modello. Per un esempio davvero cool di questo, dove il numero di parametri del modello (dimensioni storia) non è fissato a qualsiasi numero finito in anticipo, vedere la Infinite HMM . Se non si utilizzano i metodi bayesiani, quindi ti consigliamo di scegliere la lunghezza della storia in modo appropriato per la quantità di dati di training che hai, e / o attuare alcune levigante ad-hoc (ad esempio interpolazione lineare tra un ordine-2 e degli ordini 1 modello).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top