ディリクレ分布からの描画


25

我々が持つディリクレ分布持っていると言うK次元ベクトルパラメータα=[α1α2αK]。この分布からサンプル(次元ベクトル)を描画するにはどうすればよいですか?(おそらく)簡単な説明が必要です。K

回答:


25

まず、それぞれ密度のあるガンマ分布から独立したランダムサンプルy 1y Kを描画します。Ky1yK

ガンマα1=yα1eyΓα

そして設定

バツ=yj=1Kyj

さて、はディリクレ分布に従うバツ1バツK

DirichletディストリビューションWikipediaページには、Dirichletディストリビューションからサンプリングする方法が正確に記載されています。

また、RライブラリMCMCpackには、ディリクレ分布からランダム変数をサンプリングするための関数があります。


2
ディリクレからランダム生成のための機能の実装はしても、ファンドすることができcran.r-project.org/web/packages/extraDistr
ティム

2

(正確ではありませんが)簡単な方法は、Dirichlet分布を描くことがPolyaのurn実験と同等であるという事実を使用することです。(色の付いたボールのセットから描画し、ボールを描画するたびに、同じ色の2番目のボールでボールを骨nに戻します)

あなたのディリクレパラメータは考慮して私の上にunormalized分布として。α

それから:

N回繰り返す

- >を使用して私を描く多項分布をα

- >に1を加えるα

終わりの繰り返し

を正規化して分布を取得しますα

私が間違っていなければ、その方法は漸近的に正確です。ただし、Nは有限であるため、事前確率が非常に小さい分布を描画することはありません(ただし、非常に小さい頻度で分布を描画する必要があります)。ほとんどの場合、N = K.10で満足できるかもしれません。


これは、np.random.dirichletサンプリングされた確率ベクトルで正確なゼロを生成するため、実装されている方法であると思われますが、そのようなベクトルはディリクレのサポートに属していません。これが私をここに導いたものです。
エリコルヴィゴ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.