下校時刻

メモ、読んだ本のまとめメモ、考えたことのメモ、その他のメモなどが書いてあるブログです(twitter: @hoture6)

『Bayesian Methods For Hackers』Ch. 1 まとめ

最近、ベイズ統計に入門するため Bayesian Methods for Hackers を読んでるのでまとめていきます。自分用のメモという意味合いが強いです。

今日はCh. 1。


ベイズの考え方

  • Frequentists: 確率は長い目で見たときの事象の頻度
  • Bayesians: 事象がどのくらい起こるかの信頼度

ベイズの考え方により、原理的に少ない回数しか起こらない事象にも確率が定義できる。

我々の事象 Aに対する信頼度は最初、事前分布P(A)として表される。データ Xを観測することにより、我々の信頼度は事後分布P(A|X)に更新される。

パラメータの推定をする関数を考えると、以下のような違いがある。

  • 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')[:]

 \lambda_1 \lambda_2に本当に差があるかをどうやって判断するか。分布が重なっていなければ基本的に差があると判断して良い。重なっている場合は、 P(\lambda_1 > \lambda_2)を計算してこれが1(or 0)に近ければOK。