Rysunek z rozkładu Dirichleta

25

Załóżmy, że mamy rozkład Dirichleta z parametrem wektora wymiarowego . Jak narysować próbkę ( wektor wymiarowy) z tego rozkładu? Potrzebuję (możliwie) prostego wyjaśnienia.Kα=[α1,α2,...,αK]K

użytkownik1315305
źródło

Odpowiedzi:

25

Najpierw narysuj K. niezależnych losowych próbek y1,,yK. z rozkładów gamma, każda o gęstości

Gamma(αja,1)=yjaαja-1mi-yjaΓ(αja),

a następnie ustawić

xja=yjajot=1K.yjot.

x1,...,xK.

Strona Wikipedii w dystrybucji Dirichleta dokładnie informuje, jak próbkować z dystrybucji Dirichleta.

Ponadto w Rbibliotece MCMCpackznajduje się funkcja próbkowania losowych zmiennych z rozkładu Dirichleta.

Glen_b - Przywróć Monikę
źródło
2
Wdrożenie funkcji losowego generowania z Dirichleta można sfinansować również w cran.r-project.org/web/packages/extraDistr
Tim
2

Prosta metoda (choć nie jest dokładna) polega na tym, że narysowanie rozkładu Dirichleta jest równoważne eksperymentowi urny Poli. (Rysowanie z zestawu kolorowych kulek i za każdym razem, gdy losujesz piłkę, wkładasz ją z powrotem do urny drugą piłką tego samego koloru)

αja

Następnie :

powtórz N razy

αja

-> dodaj 1 doαja

koniec powtórz

α

Jeśli się nie mylę, metoda ta jest asymptotycznie dokładna. Ale ponieważ N jest skończone, NIGDY nie rysujesz niektórych rozkładów z bardzo małymi wcześniejszymi prawdopodobieństwami (podczas gdy powinieneś rysować je z bardzo małą częstotliwością). Myślę, że w większości przypadków może być satysfakcjonujące, gdy N = K.10.

Arnaud Mégret
źródło
Podejrzewam, że jest to sposób np.random.dirichletimplementacji, ponieważ generuje dokładne zera w próbkowanych wektorach prawdopodobieństwa, chociaż takie wektory nie należą do żadnego wsparcia Dirichleta. To mnie tu sprowadziło.
Eli Korvigo