Weitere ähnliche Inhalte Ähnlich wie 基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法 (14) Mehr von Ken'ichi Matsui (20) 基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法3. MASAKARI Come On! щ(゜ロ゜щ)
みんなで勉強しましょう!
https://twitter.com/_inundata/status/616658949761302528
ご指摘は @kenmatsu4 まで
18. 事後分布に基づく統計的推論
✓ = (✓1, · · · , ✓d)d次元 母数ベクトル
に対して1つめの母数 のEAP推定値を求めるには✓1
ˆ✓1 eap =
Z
✓1f(✓1|x)d✓1
=
Z Z
· · ·
Z
✓1f(✓1, ✓2, · · · , ✓d|x)d✓dd✓d 1 · · · d✓1
前に出せる(θ1にかかる部分)
同時分布
よりE(X) =
Z
xf(x)dx
特に母数が多次元の場合、数値的な評価も難しい。
19. 事後分布に基づく統計的推論
✓ = (✓1, · · · , ✓d)d次元 母数ベクトル
に対して1つめの母数 のEAP推定値を求めるには✓1
ˆ✓1 eap =
Z
✓1f(✓1|x)d✓1
=
Z Z
· · ·
Z
✓1f(✓1, ✓2, · · · , ✓d|x)d✓dd✓d 1 · · · d✓1
前に出せる(θ1にかかる部分)
同時分布
よりE(X) =
Z
xf(x)dx
特に母数が多次元の場合、数値的な評価も難しい。
解析的、数値計算的な評価が難しいが、
この分布に基づく乱数を生成できれば
それを観察して評価をできるかもしれない。
29. 時点を表す添え字 t=1, 2, …, T を用いて表現する。
(t 10) 分後に、猫たんはどこにいるか、を
で表す。これは時間とともに変化する確率変数である。
このような確率変数の集合のことを、
確率過程
と言う。
猫ちゃんの遷移
標本空間は
Ω = (1, 2, 3)
で、1:部屋A, 2:部屋B, 3:部屋C
を表す。
X(t)
30. 猫ちゃんの遷移
一般に、時刻t における確率過程 はそれ以前の
値、 に依存して決定
され、その確率は
X(t)
X(t 1)
, X(t 2)
, · · · , X(1)
※ 確率過程とは、共通の確率モデル上で定義される乱数の無限集合である。これらの確率変数は通常、よく時間と解
釈される整数、もしくは実数によってインデックスされている。
STOCHASTIC PROCESSES: Theory for Applications R. G. Gallager
http://www.rle.mit.edu/rgallager/documents/6.262lateweb1.pdf
p(X(t)
|X(t 1)
, X(t 2)
, · · · , X(1)
)
と、過去の確率変数の条件付き確率として表記される。
32. マルコフ連鎖 :遷移核
P =
2
4
0.3 0.3 0.4
0.1 0.5 0.4
0.2 0.6 0.2
3
5
この表に対応した遷移核
次に行く部屋(t)
A B C
現在の
部屋
(t-1)
A 0.3 0.3 0.4
B 0.1 0.5 0.4
C 0.2 0.6 0.2
34. 定常分布への収束
の確率分布は とするとp
(t)
i = p(X(t)
= i)X(t)
p(t)
= (p
(t)
1 , p
(t)
1 , p
(t)
1 )
であり、初期状態 の確率分布はX(1)
p(1)
= (0.6, 0.25, 0.15)
このとき、10分後(次の状態)の猫ちゃんの分布は
p(2)
= p(1)
2
4
0.3 0.3 0.4
0.1 0.5 0.4
0.2 0.6 0.2
3
5 = (0.6, 0.25, 0.15)
2
4
0.3 0.3 0.4
0.1 0.5 0.4
0.2 0.6 0.2
3
5
部屋A 部屋B 部屋C
→ = 0.235p
(2)
1= (0.235, 0.395, 0.37)
1 1
3 3
36. 遷移核を何度も掛け合わせると、ある数値に収束する。
なので、猫ちゃんの分布も収束するはず。
A B C
1 0.600000 0.250000 0.150000
2 0.235000 0.395000 0.370000
3 0.184000 0.490000 0.326000
4 0.169400 0.495800 0.334800
5 0.167360 0.499600 0.33304
6 0.166776 0.499832 0.333392
7 0.166694 0.499984 0.333322
8 0.166671 0.499993 0.333336
9 0.166668 0.499999 0.333333
10 0.166667 0.500000 0.333333
P = [[0.3, 0.3, 0.4],
[0.1, 0.5, 0.4],
[0.2, 0.6, 0.2]]
def calc(x, l, num):
tmp = copy.copy(x)
for i in range(num):
tmp = np.dot(tmp, P)
l.append(tmp)
result = []
init = [0.6, 0.25, 0.15]
result.append(init)
calc(x1, result, 10)
print tabulate(np.array(result),
["A", "B", "C"], tablefmt="pipe")
定常分布への収束
教科書に、この最初の期間をバーンインとすると記載がありました
がサンプリングでないときでも、バーンインと呼ぶのか、がわからず…
1/6 1/2 1/3
38. 初期状態が異なる3つのパターンでも、同じ状態に
収束している。
A B C A B C A B C
1 0.600000 0.250000 0.150000 0.300000 0.300000 0.400000 0.100000 0.100000 0.800000
2 0.235000 0.395000 0.370000 0.235000 0.395000 0.370000 0.235000 0.395000 0.370000
3 0.184000 0.490000 0.326000 0.184000 0.490000 0.326000 0.184000 0.490000 0.326000
4 0.169400 0.495800 0.334800 0.169400 0.495800 0.334800 0.169400 0.495800 0.334800
5 0.167360 0.499600 0.333040 0.167360 0.499600 0.333040 0.167360 0.499600 0.333040
6 0.166776 0.499832 0.333392 0.166776 0.499832 0.333392 0.166776 0.499832 0.333392
7 0.166694 0.499984 0.333322 0.166694 0.499984 0.333322 0.166694 0.499984 0.333322
8 0.166671 0.499993 0.333336 0.166671 0.499993 0.333336 0.166671 0.499993 0.333336
9 0.166668 0.499999 0.333333 0.166668 0.499999 0.333333 0.166668 0.499999 0.333333
10 0.166667 0.500000 0.333333 0.166667 0.500000 0.333333 0.166667 0.500000 0.333333
定常分布への収束
45. 標本空間のすべての事象の組み i, j について下記を
満たすと、詳細釣り合い条件を満たしている。
詳細釣り合い条件
p(X = i|X0
= j)p(X0
= j) = p(X0
= j|X = i)p(X = i)
ex) i= 1, j=3の場合
部屋Cにいる確率
さらに部屋Aに移動する確率
部屋Aにいる確率
さらに部屋Cに移動する確率
46. いま、定常分布が
詳細釣り合い条件
✤ 部屋A : 1/6
✤ 部屋B : 1/2
✤ 部屋C : 1/3
であると分かっているので、具体的に遷移核(条件
付き確率)と照らし合わせて、
次に行く部屋(j)
A B C
現在の
部屋
(i)
A 0.3 0.3 0.4
B 0.1 0.5 0.4
C 0.2 0.6 0.2
遷移核
p(B|C)p(C) = p(C|B)p(B) ! 0.6 ⇥ 1/3 = 0.4 ⇥ 1/2
p(A|B)p(B) = p(B|A)p(A) ! 0.1 ⇥ 1/2 = 0.3 ⇥ 1/6
p(A|C)p(C) = p(C|A)p(A) ! 0.2 ⇥ 1/3 = 0.4 ⇥ 1/6
ちゃんと釣り合っている!
58. 正しい遷移確率になるよう補正を行うため、符号が
正の未知の変数 c と c を導入し、
メトロポリスヘイスティングス法
f(✓|✓0
) = c q(✓|✓0
)
f(✓0
|✓) = c0
q(✓0
|✓)
f(✓|✓0
)f(✓0
) = f(✓0
|✓)f(✓)
とする。
(4.18) に代入して
c q(✓|✓0
)f(✓0
) = c0
q(✓0
|✓)f(✓) (4.23)
が得られ、提案分布で等号が成り立った。
66. MHアルゴリズム
ステップ2:
真の場合 (続き) 補正の手順
r は 0 r 1 のため、[0, 1]の一様乱数を生成し、rと比べ
・乱数 > r のとき受容
・乱数 r のとき棄却
して θ = θ とする。
r =
q(✓(t)
|a)f(a)
q(a|✓(t))f(✓(t))
(4.28)
a→θ の条件付き遷移確率密度
(t)
θ →a の条件付き遷移確率密度(t)
(t+1) (t)
68. MHアルゴリズム
ステップ2:
偽の場合 q(a|✓(t)
)f(✓(t)
) > q(✓(t)
|a)f(a) False
✓0
= a, ✓ = ✓(t)
の状態と判定。この場合提案分布
(4.20)式 の
の状態と判定される。
q(✓|✓0
)f(✓0
) > q(✓0
|✓)f(✓)
θ → a の遷移なので、提案分布は を使う。
このときの確率的補正には r を使うが、これは r = 1なので
必ず a を受容し θ = a とする。
(事実上、補正なし)
(t)
q(✓0
|✓)
(t+1)
69. MHアルゴリズム
t = t + 1 として、ステップ1に戻る。
ステップ3:
まとめるとメトロポリスヘイスティングス法は、提案された
候補点 a を確率 min(1, r) で受容 (θ = a) し、さもなくば
その場にとどまる (θ = θ ) ことを繰り返すアルゴリズム。
(t+1)
(t+1) (t)
f(·) q( |✓(t)
)
✓(t)
a
提案分布
70. 正規化定数を取り除く
r =
q(✓(t)
|a)f(a)
q(a|✓(t))f(✓(t))
式(4.28) のf(・)は 事後分布 だったので、代入して整理
します。また、生成した乱数 aを と書き直すと、
f( · |x)
✓a
r =
q(✓(t)
|✓a)f(✓a|x)
q(✓a|✓(t))f(✓(t)|x)
またベイズの定理より
r =
q(✓(t)
|✓a)f(x|✓a)f(✓a)
f(x)
q(✓a|✓(t))f(x|✓(t))f(✓(t))
f(x)
=
q(✓(t)
|✓a)f(x|✓a)f(✓a)
q(✓a|✓(t))f(x|✓(t))f(✓(t))
事後分布の正規化定数 f(・)が約分
されてきてたので、カーネルだけになり
計算できるようになった!
77. 波平釣果問題
prop_m = 1; prop_sd = 1.5
def f(x): # 事後分布カーネル
k = 11; t = 13
return x**(k-1) * np.exp(-t*x)
def q(theta):
return st.norm.pdf(theta, loc=prop_m,
scale=prop_sd)
def rand_prop():
return st.norm.rvs(prop_m, prop_sd)
theta = []
# Initial value
current = 1
theta.append(current)
n_itr = 100000
for i in range(n_itr):
# 提案分布からの乱数生成
a = rand_prop()
if a < 0: continue
r = (q(current)*f(a)) / (q(a)*f(current))
if r < 0: continue
if r >= 1 or r > st.uniform.rvs():
# Accept
theta.append(a); current = a
else:
#Reject
pass
sample mean:0.88094, sample std:0.28639
mean:0.84615, std:0.25512
理論分布と
ヒストグラムが一致
しないので、
要改善・・・
79. def f_beta(x):
p = 10.2
q = 5.8
return x**(p-1) * (1-x)**(q-1)
def rand_prop():
return st.uniform.rvs()
theta = []
# Initial value
current = 0.5
theta.append(current)
n_itr = 200000
for i in range(n_itr):
# 提案分布からの乱数生成
a = rand_prop()
r = f_beta(a) / f_beta(current)
if r < 0:
#reject
continue
if r >= 1 or r > st.uniform.rvs():
# Accept
theta.append(a)
current = a
else:
#Reject
pass
正選手問題 sample mean:0.63239, sample std:0.13082
mean:0.63750, std:0.12412
理論分布と
ヒストグラムが一致
しないので、
要改善・・・
80. 提案分布の選び方
目標分布 : ガンマ分布 f(✓|↵ = 11, = 13)
提案分布 : 正規分布
(青)
N(1, 0.5) (緑)
正規分布A
正規分布B
正規分布C
N(1, 2.0) (赤)
N(1, 0.01)
N(3, 0.5)
(赤)
(赤)
C
B
A
81. 提案分布の選び方
目標分布 : ガンマ分布 f(✓|↵ = 11, = 13)
提案分布 : 正規分布
(青)
N(1, 0.5) (緑)
正規分布A
正規分布B
正規分布C
N(1, 2.0) (赤)
N(1, 0.01)
N(3, 0.5)
(赤)
(赤)
C
B
A
なるべく目標分布と重なっているものを
選んだ方が、受容率が高まり、収束が早くなる。
赤い分布のように重なりが少なくても
理論的には収束するが、どれだけの時間が
かかるか分からない。
86. ランダムウォークMH法 : 結果
観測値 理論値
理論値-観測値
理論値
count 60823 ー ー
EAP 0.859056 0.846154 -1.525%
std 0.257280 0.255125 -0.845%
min 0.192754 0 ー
lower (2.5%) 0.428473 0.422397 -1.438%
25% 0.672256 0.663062 -1.387%
Median 0.838166 0.820656 -2.134%
75% 1.019236 1.001510 -1.770%
upper
(97.5%) 1.423322 1.414643 -0.614%
max 2.576171 ∞ ー
Mode 0.812443 0.769231 -5.618%