Vẽ từ phân phối Dirichlet


25

Hãy nói rằng chúng ta có một phân phối Dirichlet với tham số vector chiều α = [ α 1 , α 2 , . . . , α K ] . Làm thế nào tôi có thể rút ra một mẫu (một K chiều vector) từ phân phối này? Tôi cần một lời giải thích đơn giản (có thể).Kα=[α1,α2,...,αK]K

Câu trả lời:


25

Đầu tiên, vẽ mẫu ngẫu nhiên độc lập y 1 , ... , y K từ phân phối Gamma từng có mật độKy1,,yK

Gamma(αi,1)=yiαi1eyiΓ(αi),

và sau đó thiết lập

xi=yij=1Kyj.

Bây giờ, x1,...,xK sẽ tuân theo phân phối Dirichlet

Các trang Wikipedia trên phân phối Dirichlet cho bạn biết chính xác làm thế nào để lấy mẫu từ phân phối Dirichlet.

Ngoài ra, trong Rthư viện MCMCpackcó một hàm để lấy mẫu các biến ngẫu nhiên từ phân phối Dirichlet.


2
Việc thực hiện chức năng để tạo ngẫu nhiên từ Dirichlet cũng có thể được tài trợ trong cran.r-project.org/web/packages/extraDistr
Tim

2

Một phương pháp đơn giản (trong khi không chính xác) bao gồm việc sử dụng thực tế là vẽ phân phối Dirichlet tương đương với thí nghiệm urn của Polya. (Vẽ từ một tập hợp các quả bóng màu và mỗi lần bạn vẽ một quả bóng, bạn đặt nó trở lại trong bình với một quả bóng thứ hai cùng màu)

αtôi

Sau đó :

lặp lại N lần

-> vẽ một i bằng cách sử dụng αtôi phân phối đa phương

-> thêm 1 vào αtôi

kết thúc lặp lại

Bình thường hóa α để có được phân phối của bạn

Nếu tôi không sai, phương pháp đó là chính xác không có triệu chứng. Nhưng vì N là hữu hạn, bạn sẽ KHÔNG BAO GIỜ rút ra một số phân phối với xác suất trước rất nhỏ (trong khi bạn nên vẽ chúng với tần suất rất nhỏ). Tôi đoán nó có thể thỏa mãn trong hầu hết các trường hợp với N = K.10.


Tôi nghi ngờ đây là cách np.random.dirichletđược thực hiện, bởi vì nó tạo ra các số 0 chính xác trong các vectơ xác suất được lấy mẫu, mặc dù các vectơ như vậy không thuộc về bất kỳ hỗ trợ Dirichlet nào. Đây là những gì đã đưa tôi đến đây.
Eli Korvigo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.