QA@IT

ノンパラメトリックベイズの実験

5821 PV

 書籍、「続・わかりやすいパターン認識」の第12章のp266~270にあるノンパラメトリックベイズモデルの実験のクラスタリング法1の実験をp260~261にある「クラスタリング法1のアルゴリズム」に従って、実際にpythonで実装して確かめているのですが、p270の図12.1のlogvのグラフの繰り返し回数が1~10回あたりでlogvが急激に上昇している所が現在再現できなくて悩んでいます。この辺り、既にご経験されている方で、何かアドバイスいただけたらと思って投稿しました。
p261の式(12.16)で対数を取って、
logv = logP(s) + Σ(i=1~c){logG0(θi) + Σ(xk∈ωi)logp(xk|θi)}
となりますが、私の計算してみたものでは、
(1)logP(s) 減少傾向
(2)Σ(i=1~c)logG0(θi) 減少傾向
(3)Σ(i=1~c)Σ(xk∈ωi)logp(xk|θi) -2400あたりでほぼ一定
となり急激に増加する箇所がほとんどありません。
logvの式ですが、最初は(2)のθiは各クラスタ毎の値なので、s= {s1,...,sn}でクラスタ分けされた観測パターンXの座標の情報からθ=(μi, Λi)を計算していたのですが、ni=1個の場合、Σi=0で無限大になって計算できなかったり、ni=2個の場合もΛiの値が大きくなりすぎて計算できなくなってしまうので、現在は、(3)式のp(xk|θi)はp269の式(12.37)からサンプリングしたθiを使うようにしています。(2)の基底分布G0(θi)はサンプリングしたθiごとのG0(θi)を計算してそれを平均化した値を各クラスタ毎のG0(θi)として使っています。そうすると上に書いた(1)〜(3)のような状態になってしまいます。このあたりの計算方法がおそらくまずいと思うのですが、これらについての実装方法について何かアドバイスいただければ幸いです。
現在、p261のStep4で(1)と(2)の条件下ではlogvは-2400あたりに張り付いてしまいます。逆にこの条件を無くすと、logvの値は減少していってしまいます。p260~261のStep2,3では、Step4の(1)と(2)の条件下では初期状態のクラスタ0がni=500個の状態から数十個くらい減って、その分の数だけ新規クラスタが数個生成いされるのですが、すぐに元の状態に戻ってしまって、それの繰り返しとなります。Step4の(1)と(2)の条件を取ると、クラスタ0の個数はどんどん減っていくのですが、その場合上に書いたようにlogvの値はどんどん減少していってしまいます。Step2,3についても何かアドバイスありましたらお願い致します。

ウォッチ

この質問への回答やコメントをメールでお知らせします。