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ể).
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ể).
Câu trả lời:
Đầ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 độ
và sau đó thiết lập
Bây giờ, 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 R
thư viện MCMCpack
có một hàm để lấy mẫu các biến ngẫu nhiên từ phân phối Dirichlet.
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)
Sau đó :
lặp lại N lần
-> vẽ một i bằng cách sử dụng phân phối đa phương
-> thêm 1 vào
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.
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.