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.