
124
■
10
章
ベイズ計算を近似する
10.6
Log-Likelihoood
(対数尤度)
ここで必要なのは、
LogLikelihood
である。
# class Height
def LogLikelihood(self, data, hypo):
x = data
mu, sigma = hypo
loglike = scipy.stats.norm.logpdf(x, mu, sigma)
return loglike
norm.logpdf
は、正規分布(ガウス)
PDF
の対数尤度を計算する。
更新処理全体は次のようになる。
suite.Log()
suite.LogUpdateSet(xs)
suite.Exp()
suite.Normalize()
復習すると、
Log
がスイートを対数変換する。
LogUpdateSet
は、
LogUpdate
を呼び出
し、さらに、
LogLikelihood
を呼び出す。対数尤度の足し算が、尤度による乗算と同じ
ため、
LogUpdate
は
Pmf.Incr
を使う。
更新の後で、対数尤度は、大きな負数になっているので、
Exp
は変換を戻す前に、そ
れらを上にシフトする。これがアンダーフローを避けるやり方である。
スイートが元に変換されると、確率は再び「線形」となるが、これは、「対数ではない」
ということなので、再度
Normalize
を使う。
このアルゴリズムを用いることで、アンダーフローを起こさずにデータ集合全体を処
理できるが、まだ遅い。私のコンピュータだと、
1
時間はかかるだろ ...