Dirichlet 배포판에서 그리기


25

차원 벡터 모수 갖는 Dirichlet 분포가 있다고 가정 해 봅시다 . 이 분포에서 표본 ( K- 차원 벡터)을 어떻게 그릴 수 있습니까? (아마도) 간단한 설명이 필요합니다.α = [ α 1 , α 2 , . . , α K ] KKα=[α1,α2,...,αK]K

답변:


25

먼저 밀도가 각각있는 감마 분포에서 케이 독립적 인 랜덤 샘플 와이1,,와이케이 를 그 립니다

감마(α나는,1)=와이나는α나는1이자형와이나는Γ(α나는),

그런 다음 설정

엑스나는=와이나는j=1케이와이j.

이제 엑스1,...,엑스케이 는 Dirichlet 배포판을 따릅니다.

Dirichlet 배포판Wikipedia 페이지는 Dirichlet 배포판 에서 샘플링하는 방법을 정확하게 알려줍니다.

또한 R라이브러리 MCMCpack에는 Dirichlet 분포에서 랜덤 변수를 샘플링하는 기능이 있습니다.


2
Dirichlet에서 랜덤 생성을위한 기능의 구현은 cran.r-project.org/web/packages/extraDistr
Tim

2

Dirichlet 분포를 그리는 것은 Polya의 urn 실험과 동일하다는 사실을 사용하는 간단한 방법 (정확하지는 않음)으로 구성됩니다. (컬러 볼 세트에서 그리기 및 볼을 그릴 때마다 같은 색상의 두 번째 볼로 항아리에 다시 넣습니다)

i에 대한 정규화되지 않은 분포로 Dirichlet 매개 변수 를 고려하십시오 .α나는

그런 다음 :

N 번 반복

-> 다항 분포를 사용하여 i를 그립니다.α나는

-> 1을 추가α나는

끝 반복

분포를 얻기 위해 를 정규화 하십시오α

내가 틀리지 않으면 그 방법은 무의식적으로 정확합니다. 그러나 N은 유한하기 때문에 이전 확률이 매우 작은 분포를 그리지 않습니다 (빈도는 매우 작게 분포해야 함). 대부분의 경우 N = K.10이면 만족 스럽습니다.


np.random.dirichlet샘플링 된 확률 벡터에서 정확한 0을 생성하기 때문에 이것이 구현 된 방법이라고 생각합니다 . 그러나 이러한 벡터는 Dirichlet 지원에 속하지 않습니다. 이것이 나를 여기로 데려온 것입니다.
Eli Korvigo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.