見出し画像

閑話休題(備忘録)

Pythonを使って、ベイズ流の分布確率を得る方法を教えて下さい。

Pythonを用いてベイズの統計的方法を使って分布確率を得るためには、pymc3というライブラリが一般的に利用されます。このライブラリを使えば、ベイズ推定を利用してパラメータの事後確率分布を得ることができます。

例えば、ベルヌーイ分布(2値の結果を持つ確率分布)のパラメータをベイズ推定する例を示します。この例では、コイン投げの結果(表=1, 裏=0)をベイズ推定してみましょう。

まずは、pymc3をインストールします:

pythonCopy code!pip install pymc3

次に、ベイズ推定を用いた分布確率を得るためのコードは以下のようになります:

pythonCopy codeimport pymc3 as pm
import numpy as np

# データを生成します。ここでは50回コインを投げて、30回表が出たとします。
data = np.concatenate((np.ones(30), np.zeros(20)))

with pm.Model() as model:
    # 事前確率を設定します。ここでは一様分布を仮定します。
    p = pm.Uniform('p', 0, 1)

    # データと事前確率から事後確率を計算します。
    obs = pm.Bernoulli('obs', p, observed=data)
    
    # MCMCを用いたサンプリング
    trace = pm.sample(2000, tune=1000)

# 事後分布を表示
pm.plot_posterior(trace)

このコードは、コイン投げの結果(30回表、20回裏)から、表が出る確率pの事後確率分布を求めるものです。事前確率は一様分布を仮定しています。また、pm.sample関数はMCMC(マルコフ連鎖モンテカルロ法)を用いて事後確率分布のサンプルを生成します。

pm.plot_posterior関数で事後分布をプロットすると、ベイズ推定によって得られたパラメータpの確率分布を確認することができます。

いいなと思ったら応援しよう!