最近、Qiitaに登録させてもらった者です。
Qiitaを参考に現在、ノンパラメトリックベイズを勉強中なのですが、その一環として書籍、「続・わかりやすいパターン認識」の第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}でクラスタ分けされた座標の情報からθ=(μ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の値は減少していってしまいます。
More than 5 years have passed since last update.
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
List of users who liked
10