閑話休題(備忘録)
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の確率分布を確認することができます。