Frage

Ich fing einfach an, mehr darüber zu Lesen Markov-Chain-Generatoren heute, und bin wirklich fasziniert von dem ganzen Prozess der Gebäude ein.Von meinem Verständnis, den zukünftigen Zustand ist abhängig von der statistischen Staaten Vergangenheit bis in die Gegenwart.

Beispiel:

Hallo Welt.Hallo Dolly.Hallo Welt.

"Die Welt" folgt "Hello" ~66% der Zeit in die Quelle.

Wenn, dass ist immer der Fall, wie sich dann vermeiden Sie es heraus-setzen die gleichen Ergebnisse jedes mal?Die statistisch-Ereignisse nicht ändern, mit einer statischen Zeichenfolge, so bin ich Recht davon ausgehen, dass keine der Varianten wird jede erzeugt werden, es sei denn, die source-Daten in irgendeiner Weise geändert wird?

Wie bekomme ich Variationen von einer statischen Quelle, unter Berücksichtigung der statistischen Werte, doch so dass eine gewisse Flexibilität?Mit meinem Beispiel oben, wie kann ich zulassen, dass mein generator zu Folgen "Hallo" mit "Dolly," wenn "Dolly" folgt nur "Hallo" 33% der Zeit?

Ich denke, was ich Frage, ist, Wie kann ich base die Wahrscheinlichkeit meiner nächsten Auswahl auf die statistische Präsenz der Worte, Folge meinem vorliegende Auswahl?So "Dolly" zeigt bis 33% der Zeit, und "Welt" zeigt sich 66% der Zeit - oder bin ich völlig verloren hier?

War es hilfreich?

Lösung

Sie verwenden einen Zufallszahlengenerator, um zu wählen, welchen Weg Sie gehen nach unten.Speichern Sie jeden Status (die ist wirklich eine Geschichte der N vorherigen Gegenstände), und die Wahrscheinlichkeiten für den Zustand.Dann wählen Sie eine zufällige Zahl und entscheiden Sie basierend auf dem, was der nächste Zustand überführen ist.

In Ihrem Beispiel haben Sie eine Markov-Kette mit N-1 haben Sie die-chain-Struktur, die etwa so aussahen:

<start> -> Hello : 1.0

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

Dolly. -> Hello : 1.0

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

Wenn Ihr Aktueller Zustand ist Hallo, dann wird Ihr Nächster möglichen Zustände sind auf der ganzen Welt.und Dolly..Generieren Sie eine Zufallszahl zwischen 0 und 1, und wählen Sie Welt.wenn es ist weniger als 0.666666, ansonsten wählen Sie Dolly.

Mit N=2 Markov-Kette bekommt man fast deterministisches Verhalten mit, dass die Eingabe:

<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

Andere Tipps

Zwei Anmerkungen:

1), um Proben aus einem Zufallsprozess zu erzeugen, ob oder ob nicht eine gewisse Auswahl ist recht (> 50%) wahrscheinlich, und andere weniger, erfordern nur eine gewichtete „Münzwurf“: erzeugt eine reelle Zufallszahl gleichmäßig auf [ 0,1), und prüfen die Möglichkeiten in der gleichen festen Reihenfolge, eine Summe von Wahrscheinlichkeiten zu halten bisher. Sobald die Summe Ihrer zufällig gewählte Zahl überschreitet, diese Wahl wählen. Wenn Sie Ihre Auswahl unnormierte haben Wahrscheinlichkeiten (nicht auf 1 summieren), müssen Sie zuerst die Summe der Wahrscheinlichkeiten s zu berechnen, und entweder teilen sie alle mit s, oder wählen Sie Ihre Zufallszahl auf [0, s)

2) Überanpassung zu vermeiden, wenn Sie Ihr Modell aus einer kleinen Probenmenge Trainingsdaten (im Vergleich zu der Anzahl der Parameter) Abschätzen, verwendet Bayesian priors auf den Modellparametern. Für ein wirklich cooles Beispiel dafür, wo die Anzahl der Modellparameter (Geschichte Größe) ist nicht auf eine endliche Anzahl im Voraus festgelegt, finden Sie in die Infinite HMM . Wenn Sie nicht Bayesian Methoden verwenden, dann wollen Sie die Geschichte Länge in geeigneter Weise für die Menge der Trainingsdaten Sie haben, und / oder implementieren eine Ad-hoc-Glättung (zB lineare Interpolation zwischen einer Ordnung-2 und auftrags- wählen 1-Modell).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top