Dessin de la distribution Dirichlet

25

Disons que nous avons une distribution de Dirichlet avec le paramètre de vecteur dimension . Comment puis-je tirer un échantillon (un vecteur dimensionnel) de cette distribution? J'ai besoin d'une explication (éventuellement) simple.α = [ α 1 , α 2 , . . . , α K ]Kα=[α1,α2,...,αK]K

user1315305
la source

Réponses:

25

Tout d'abord, tirez échantillons aléatoires indépendants y 1 , , y K à partir de distributions gamma chacune avec une densitéKy1,,yK

Gamma(αje,1)=yjeαje-1e-yjeΓ(αje),

puis définissez

Xje=yjej=1Kyj.

X1,...,XK

La page Wikipedia sur la distribution Dirichlet vous indique exactement comment échantillonner à partir de la distribution Dirichlet.

De plus, dans la Rbibliothèque, MCMCpackil existe une fonction d'échantillonnage des variables aléatoires de la distribution de Dirichlet.

Glen_b -Reinstate Monica
la source
2
La mise en œuvre de la fonction de génération aléatoire à partir de Dirichlet peut également être financée
Tim
2

Une méthode simple (bien qu'imprécise) consiste à utiliser le fait que dessiner une distribution de Dirichlet est équivalent à l'expérience de l'urne de Polya. (Dessiner à partir d'un ensemble de boules colorées et chaque fois que vous dessinez une balle, vous la remettez dans l'urne avec une deuxième balle de la même couleur)

αje

Ensuite :

répéter N fois

αje

αje

répéter la fin

α

Si je ne me trompe pas, cette méthode est asymptotiquement exacte. Mais puisque N est fini, vous ne dessinerez JAMAIS des distributions avec de très faibles probabilités a priori (alors que vous devriez les dessiner avec une très petite fréquence). Je suppose que cela pourrait être satisfaisant dans la plupart des cas avec N = K.10.

Arnaud Mégret
la source
Je soupçonne que c'est la façon dont np.random.dirichletest implémentée, car elle génère des zéros exacts dans les vecteurs de probabilité échantillonnés, bien que ces vecteurs n'appartiennent à aucun support Dirichlet. C'est ce qui m'a amené ici.
Eli Korvigo