我々が持つディリクレ分布持っていると言う次元ベクトルパラメータ。この分布からサンプル(次元ベクトル)を描画するにはどうすればよいですか?(おそらく)簡単な説明が必要です。
我々が持つディリクレ分布持っていると言う次元ベクトルパラメータ。この分布からサンプル(次元ベクトル)を描画するにはどうすればよいですか?(おそらく)簡単な説明が必要です。
回答:
まず、それぞれ密度のあるガンマ分布から独立したランダムサンプルy 1、… 、y Kを描画します。
そして設定
さて、はディリクレ分布に従う
DirichletディストリビューションのWikipediaページには、Dirichletディストリビューションからサンプリングする方法が正確に記載されています。
また、R
ライブラリMCMCpack
には、ディリクレ分布からランダム変数をサンプリングするための関数があります。
(正確ではありませんが)簡単な方法は、Dirichlet分布を描くことがPolyaのurn実験と同等であるという事実を使用することです。(色の付いたボールのセットから描画し、ボールを描画するたびに、同じ色の2番目のボールでボールを骨nに戻します)
あなたのディリクレパラメータは考慮して私の上にunormalized分布として。
それから:
N回繰り返す
- >を使用して私を描く多項分布を
- >に1を加える
終わりの繰り返し
を正規化して分布を取得します
私が間違っていなければ、その方法は漸近的に正確です。ただし、Nは有限であるため、事前確率が非常に小さい分布を描画することはありません(ただし、非常に小さい頻度で分布を描画する必要があります)。ほとんどの場合、N = K.10で満足できるかもしれません。
np.random.dirichlet
サンプリングされた確率ベクトルで正確なゼロを生成するため、実装されている方法であると思われますが、そのようなベクトルはディリクレのサポートに属していません。これが私をここに導いたものです。