Zeichnung aus Dirichlet-Verteilung

25

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.Kα=[α1,α2,...,αK]K

user1315305
quelle

Antworten:

25

Zeichnen Sie zunächst unabhängige Zufallsstichproben aus Gamma-Verteilungen mit jeweils einer DichteKy1,,yK

Gamma(αich,1)=yichαich-1e-yichΓ(αich),

und dann einstellen

xich=yichj=1Kyj.

Nun folgt einer Dirichlet-Verteilungx1,...,xK

Auf der Wikipedia-Seite zur Dirichlet-Distribution erfahren Sie genau, wie Sie Beispiele aus der Dirichlet-Distribution entnehmen können.

In der RBibliothek MCMCpackgibt es auch eine Funktion zum Abtasten von Zufallsvariablen aus der Dirichlet-Verteilung.

Glen_b - Setzen Sie Monica wieder ein
quelle
2
Die Implementierung der Funktion zur Zufallsgenerierung aus Dirichlet kann auch in cran.r-project.org/web/packages/extraDistr
Tim
2

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.)

αich

Dann :

N-mal wiederholen

αich

αich

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.

Arnaud Mégret
quelle
Ich vermute, dass dies so np.random.dirichletimplementiert ist, weil es in abgetasteten Wahrscheinlichkeitsvektoren genaue Nullen erzeugt, obwohl solche Vektoren zu keiner Dirichlet-Unterstützung gehören. Das hat mich hierher gebracht.
Eli Korvigo