Nehmen wir an, wir haben eine Dirichlet-Verteilung mit dem dimensionalen . Wie kann ich aus dieser Verteilung eine Stichprobe (einen dimensionalen Vektor) ziehen? Ich brauche eine (möglicherweise) einfache Erklärung.
Nehmen wir an, wir haben eine Dirichlet-Verteilung mit dem dimensionalen . Wie kann ich aus dieser Verteilung eine Stichprobe (einen dimensionalen Vektor) ziehen? Ich brauche eine (möglicherweise) einfache Erklärung.
Antworten:
Zeichnen Sie zunächst unabhängige Zufallsstichproben aus Gamma-Verteilungen mit jeweils einer Dichte
und dann einstellen
Nun folgt einer Dirichlet-Verteilung
Auf der Wikipedia-Seite zur Dirichlet-Distribution erfahren Sie genau, wie Sie Beispiele aus der Dirichlet-Distribution entnehmen können.
In der R
Bibliothek MCMCpack
gibt es auch eine Funktion zum Abtasten von Zufallsvariablen aus der Dirichlet-Verteilung.
Eine einfache (wenn auch nicht exakte) Methode besteht darin, dass das Zeichnen einer Dirichlet-Verteilung dem Urnenexperiment der Polya entspricht. (Wenn Sie aus einer Reihe farbiger Bälle ziehen und jedes Mal, wenn Sie einen Ball zeichnen, legen Sie ihn mit einem zweiten Ball derselben Farbe in die Urne zurück.)
Dann :
N-mal wiederholen
Ende wiederholen
Wenn ich mich nicht irre, ist diese Methode asymptotisch genau. Aber da N endlich ist, werden Sie NIEMALS einige Verteilungen mit sehr kleinen vorherigen Wahrscheinlichkeiten zeichnen (während Sie sie mit einer sehr kleinen Häufigkeit zeichnen sollten). Ich denke, es könnte in den meisten Fällen mit N = K.10 befriedigend sein.
np.random.dirichlet
implementiert ist, weil es in abgetasteten Wahrscheinlichkeitsvektoren genaue Nullen erzeugt, obwohl solche Vektoren zu keiner Dirichlet-Unterstützung gehören. Das hat mich hierher gebracht.