今回は予測分布をベータ分布として棄却サンプリングを試してみます。ベータ分布とは、確率密度関数が下記の式で表される確率分布のことです。正の実数のパラメータです。1]上の連続型の確率分布であることが特徴です。ベータ分布の形を確認するためにScipyというPythonライブラリを使って確認してみます。必要なライブラリのインポートです。uniform次にベータ分布を描画してみます。必要なコードはたったこれだけです。b))棄却サンプリングの実行では、いよいよ棄却サンプリングを試してみます。提案分布はどんな分布であっても構わないのですが、今回はサンプリングが簡単で理解もしやすい一様分布とします。求めることが出来ます。具体的には0から1の間で一つ値を決定することになります。この処理によって横軸と縦軸のスケールの異なる一様分布から生成された二つの乱数によって座標が一点決まることになります。予測分布よりも下の範囲であれば採用します。シンプルですね!当然ながらサンプリング数が多ければ多いほど、予測分布に近しい結果になります。実装して結果を見ていきます。求めますが、今回はScipyのOptimize関数を使います。ScipyのOptimize関数は目的関数を最適化(最小値もしくは最大値を求める)する便利な関数です。M)にマイナスをつけているのは、ベータ分布の最大値を求めるために最小値問題に帰着させるためです。結果を見てみると上手くベータ分布の最大値を求められていることがわかります。次に乱数を生成して提案分布が予測分布に近しい結果になっていくことを確認します。乱数を1000個生成した場合を見てみます。distribution")plt.legend()1000個の乱数だと、まだ少し予測分布(ベータ分布)に対して少しバラツキがありますね。乱数を50000個に増やしてみましょう。すると、乱数が1000個に比べてベータ分布に対してほぼ同じような曲線を描いていることがわかります。最後に今回は基本的なサンプリングアルゴリズムである棄却サンプリングを試してみました。異なる分布から求めたい分布のサンプルを非常にシンプルな考えで得ることが出来て面白いですね。サンプリングアルゴリズムは他にもたくさんあるので、是非試してみたいと思います。こんにちわ、研究開発部の島田です。12引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。