『Bayesian Methods For Hackers』Ch. 1 まとめ
最近、ベイズ統計に入門するため Bayesian Methods for Hackers を読んでるのでまとめていきます。自分用のメモという意味合いが強いです。
今日はCh. 1。
ベイズの考え方
- Frequentists: 確率は長い目で見たときの事象の頻度
- Bayesians: 事象がどのくらい起こるかの信頼度
ベイズの考え方により、原理的に少ない回数しか起こらない事象にも確率が定義できる。
我々の事象に対する信頼度は最初、事前分布として表される。データを観測することにより、我々の信頼度は事後分布に更新される。
パラメータの推定をする関数を考えると、以下のような違いがある。
- Frequentists: 値を返す。パラメータは(我々が知らないだけで)最初から一つの値に決まっているはず
- Bayesians: 確率分布を返す。パラメータの分布に我々の信頼度が反映されている
ただし、データを無限個観測すれば、二つの関数の返り値は同じになるはず(しかし、"N is never enough"なので、データが無限個あると考えて良い状況は現実的でない)。
ベイズ推定の方法
- LibrarianとFarmerの話。
確率分布
- 離散分布: 確率質量関数。ex) Poisson分布
- 連続分布: 確率密度関数。ex) 指数分布
PyMCによるベイズ統計
text件数の例。
# 1. 事前分布の設定 lambda_1 = pm.Exponential('lambda_1', alpha) lambda_2 = pm.Exponential('lambda_2', alpha) tau = pm.DiscreteUniform('tau', 0, 70) # 2. データの観測 obs = pm.Poisson('obs', lambda_, value = count_data, observed = True) # 3. モデル作成 model = pm.Model([obs, lambda_1, lambda_2, tau]) # 4. MCMC mcmc = pm.MCMC(model) mcmc.sample(40000, 10000) # 5. 結果の取得 lambda_1_samples = mcmc.trace('lambda_1')[:] lambda_2_samples = mcmc.trace('lambda_2')[:] tau = mcmc.trace('tau')[:]
とに本当に差があるかをどうやって判断するか。分布が重なっていなければ基本的に差があると判断して良い。重なっている場合は、を計算してこれが1(or 0)に近ければOK。