ベイズ推定(Bayesian inference) は、未知パラメータを確率変数として扱い(伝統的統計学ではパラメータは定数)、データを観測する前の知識(事前分布)を、観測データによって更新する推定方法
確率分布 再訪¶
確率分布¶
確率分布(確率密度関数)p(x) は、次の形で表すことができる:
p(x)=Z1f(x) ここで
である。
例:正規分布
カーネルを
f(x)=exp(−2σ2(x−μ)2) 正規化定数を
Z=2πσ2 とおくと、正規分布は次のように表すことができる
p(x)=2πσ21exp(−2σ2(x−μ)2)=Z1f(x) カーネル¶
確率分布の カーネル(kernel) とは、正規化定数を除いた、確率分布の「形」だけを表す関数である。
記号的には
p(x)∝f(x) と書かれることが多く、この ∝ は「p(x) は f(x) に比例する(定数倍を除いて同じ)」という意味を持つ。
正規化定数¶
カーネル f(x) がどれほど「確率っぽい形」をしていても、確率の定義上、積分(和)が1でなければ確率分布ではない。
そこで、 正規化定数(normalizing constant) Z は、確率分布の条件∫p(x)dx=1を満たすために導入される。
Z は Z=∫f(x)dx (離散の場合は Z=∑xf(x) )と定義される。
特に高次元では
Z=∫Rdf(x)dx の計算が極めて困難、あるいは解析的に不可能になる。
そのため実務では
Z を明示的に計算しない
Z を含まない比だけを使う
という戦略が取られる。
直感的な理解¶
カーネルは「どこが高く、どこが低いか」を決める
正規化定数は「全体をどれだけ縮めるか」を決める
したがって、相対的な大小関係だけが重要な場面では、カーネルだけ分かっていれば十分である。
例えばMAP推定では
argθmaxp(θ∣y)=argθmaxf(θ) となるため、正規化定数は完全に不要である。
ベイズ推定での例¶
事後分布は
p(θ∣y)=p(y)p(y∣θ)p(θ) と書けるが、通常は
p(θ∣y)∝p(y∣θ)p(θ) と表現される。
ここで
カーネル:p(y∣θ)p(θ)
正規化定数:p(y)=∫p(y∣θ)p(θ)dθ
であり、p(y) は 周辺尤度(evidence) と呼ばれる。
例:コイン投げ¶
表が出たら1、裏が出たら0として以下のようなデータがとれたとする。
事前分布にベータ分布、尤度をベルヌーイ分布とする
import numpy as np
import pymc as pm
import arviz as az
# 観測データ
y_obs = np.array([1,0,1,1,0,1,0,1,1,0], dtype=int) # 0/1
N = y_obs.size
with pm.Model() as model:
p = pm.Beta("p", alpha=1, beta=1)
y = pm.Bernoulli("y", p=p, observed=y_obs)
idata = pm.sample(2000, tune=1000, chains=4, progressbar=False, random_seed=42)
az.summary(idata, var_names=["p"])
Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [p]
Sampling 4 chains for 1_000 tune and 2_000 draw iterations (4_000 + 8_000 draws total) took 1 seconds.
点推定¶
EAP (expected a posteriori, 事後期待値)¶
事後分布の期待値を推定値とする方法
θ^eap =E[θ∣x]=∫θf(θ∣x)dθ=∫θf(x)f(x∣θ)f(θ)dθ eap = idata.posterior.mean(dim=["chain", "draw"])
float(eap["p"])
MAP (maximum a posteriori, 事後確率最大値)¶
事後分布の最大値(mode)を推定値とする
θ^map =θmaxf(θ∣x) with model:
map_est = pm.find_MAP()
float(map_est["p"])
MED (posterior median, 事後中央値)¶
事後分布の中央値、すなわち、累積分布関数が0.5になる点を推定値とするもの
F(θ^med∣x)=∫θ^med f(θ∣x)dθ=1/2 事後分散¶
EAP推定量の散らばりの目安には、事後分布の分散である 事後分散(posterior variance) と、その平方根をとった 事後標準偏差(posterior standard deviation) が用いられる。
V[θ]=V[θ∣x]=E[(θ−θ^eap)2∣x]=∫(θ−θ^eap)2f(θ∣x)dθ std = idata.posterior.std(dim=["chain", "draw"])
float(std["p"])
予測分布¶
パラメータの分布ではなく、データの予測値を出すもの。
条件付き予測分布¶
モデルの分布をf(x∣θ) とした場合、 条件付き予測分布(conditional predictive distribution) は f(x∗∣θ^) である。θ^はEAP推定量など事後分布からの推定量を用いる。
事後予測分布¶
事後予測分布(posterior predictive distribution)
f(x∗∣x)=∫−∞+∞f(x∗∣θ)f(θ∣x)dθ 事後分布 f(θ∣x) におけるモデル分布 f(x∗∣θ) の期待値