Diciamo che abbiamo una distribuzione di Dirichlet con parametro vettoriale tridimensionale . Come posso disegnare un campione (un vettore tridimensionale ) da questa distribuzione? Ho bisogno di una (forse) semplice spiegazione.
Diciamo che abbiamo una distribuzione di Dirichlet con parametro vettoriale tridimensionale . Come posso disegnare un campione (un vettore tridimensionale ) da questa distribuzione? Ho bisogno di una (forse) semplice spiegazione.
Risposte:
Per prima cosa, disegna campioni casuali indipendenti dalle distribuzioni gamma ciascuno con densità
e poi impostare
Ora, seguirà una distribuzione di Dirichlet
La pagina Wikipedia sulla distribuzione di Dirichlet spiega esattamente come campionare dalla distribuzione di Dirichlet.
Inoltre, nella R
libreria MCMCpack
è presente una funzione per il campionamento di variabili casuali dalla distribuzione di Dirichlet.
Un metodo semplice (sebbene non esatto) consiste nell'utilizzare il fatto che disegnare una distribuzione di Dirichlet equivale all'esperimento dell'urna della Polya. (Disegnando da una serie di palline colorate e ogni volta che disegni una pallina, la rimetti nell'urna con una seconda pallina dello stesso colore)
Considera i tuoi parametri Dirichlet come una distribuzione non normalizzata su i.
Poi :
ripetere N volte
-> disegna un i usando la distribuzione multinomiale
-> aggiungi 1 a
fine ripetizione
Normalizza per ottenere la tua distribuzione
Se non sbaglio, quel metodo è asintoticamente esatto. Ma poiché N è finito, NON disegnerai MAI alcune distribuzioni con probabilità precedenti molto piccole (mentre dovresti disegnarle con una frequenza molto piccola). Immagino che potrebbe essere soddisfacente nella maggior parte dei casi con N = K.10.
np.random.dirichlet
viene implementato, perché genera zeri esatti nei vettori di probabilità campionati, sebbene tali vettori non appartengano a nessun supporto di Dirichlet. Questo è ciò che mi ha portato qui.