More Related Content Similar to 基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法
Similar to 基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法 (16) More from Ken'ichi Matsui
More from 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%