
16
■
2
章
計算統計学
Update
を呼ぶところも同じ。
data = 'B'
pmf.Update(data)
Update
の実装も同じである。
def Update(self, data):
for hypo in self.Values():
like = self.Likelihood(data, hypo)
self.Mult(hypo, like)
self.Normalize()
変更が必要なのは、
Likelihood
だけである。
def Likelihood(self, data, hypo):
if hypo == data:
return 0
elif hypo == 'A':
return 0.5
else:
return 1
最後の結果を出力するところも同じ。
for hypo, prob in pmf.Items():
print hypo, prob
解答は、次のようになる。
A 0.333333333333
B 0.0
C 0.666666666667
この例では、
Likelihood
を求めるコードは複雑だったが、ベイズ更新のフレームワー
クは単純だった。本節のコードは、
http://thinkbayes.com/monty.py
からダウンロード
できる。詳細については、まえがきの「コードについて」(
ix
ページ)を参照のこと。
2.5
フレームワークをカプセル化する
フレームワークの中のどの要素が同じなのかわかったので、それらをカプセル化し
て、
__
init
__
、
Update