
15.8
まだ終わっていない
■
191
数が入る配列
one
を作る。それから親クラスの
Update
を呼び出し、尤度を計算して、
下位仮説を更新する。
したがって、実行例では、
3
つ更新する。最初は、「
3
頭のライオンを見た」のような
もの。次は、「
2
頭トラを見たがライオンは見なかった」。第
3
は、「
1
頭クマを見たが、
ライオンもトラも見なかった」である。
Likelihood
の新しい版は次のようになる。
# class Species4
def Likelihood(self, data, hypo):
dirichlet = hypo
like = 0
for i in range(self.iterations):
like += dirichlet.Likelihood(data)
#
新しく見つかったもので、未知種族の個数を補正する
m = len(data)
num_unseen = dirichlet.n - m + 1
like *= num_unseen
return like
これは、
Species.Likelihood
とほとんど同じで、因子
num_unseen
だけが異なる。こ
の補正は、新種を新たに発見するたびに、確認できた未知の種が他にもいくつかある
ということを考慮しなければならないので、必要だ。
n
のより大きな値については、確
認できたはずの未知の種がもっと多いので、データの尤度が増える。
面倒なところなので、最初からうまくやれなかったことを認めざるを得ないが、以前
の版と比較