
38
■
4
章
もっと推定を
4.4
最適化
これまで私が示したコードは、読みやすさを優先したものだが、あまり効率的ではな
かった。一般に、私は、見た目でも正しいとわかるコードを開発するようにしている。
その後で、目的のための十分な速度があるかどうか確かめる。十分だったら最適化の
必要はない。この例では、実行時のことを考えれば、速度を上げるいくつかの方法が
ある。
最初に、スイートを正規化する回数を減らすことができる。元々のコードでは、
1
回
硬貨を回すごとに
Update
を呼び出していた。
dataset = 'H' * heads + 'T' * tails
for data in dataset:
suite.Update(data)
Update
は、次のようになっていた。
def Update(self, data):
for hypo in self.Values():
like = self.Likelih
ood(
data, hypo)
self.Mult(hypo, like)
return self.Normalize()
Update
では、仮説を
1
つずつ処理していて、その後で
Noramalize
を呼び出すのだが、
これは、仮説をまた反復処理する。正規化の前にすべての更新を済ますことで、時間
の節約ができる。
Suite
には、それを行う
UpdateSet
というメソッドがある。
def UpdateSet(self, dataset):
for data in dataset:
for hypo in ...