多項分布の最尤推定とMAP推定

@nokunoさんが多項分布の最尤推定の導出をブログに書いてらしたのを読んで,そういえば以前,多項分布の最尤推定とMAP推定を導出したことを思い出した.せっかくなのでブログに書いておく.

実はこれ,ブッチャー本を読んでいてLaplaceスムージングなるものが出てきた後に,これを一般化するとDirichletスムージングという形になるよー,という流れで出てきた.Dirichletスムージングはその名のとおり,Dirichlet分布を事前分布とする多項分布のMAP推定なんだけれど,意外とそのことを丁寧に説明している書籍は少ない (導出過程まで書いてある文献を知らない).というわけで,ちょっとした頭の体操として導出をやってみた,というのが3ヶ月前.今読み返すと,まったく覚えてないから人間で不思議.


多項分布は,出現確率がp_kであるようなK種類の事象がそれぞれx_k回起こる確率の分布で,K個の出現確率p_kをパラメータとする.

直観的な例としては,3種類の事象があって,それぞれの出現回数をA, B, C回とすると,それぞれの出現確率は,p_A = A/(A+B+C), p_B = B/(A+B+C), p_C = C/(A+B+C) だと直観的に感じるだろう.実はこれが最尤推定であるということは@nokunoさんのご説明のとおり.

観測値が多い場合にはそれでいいのだけれど,事象の数が増えた場合に一回も観測されないような事象が多数出現してしまう.そのままだと出現確率が0になってしまう.そういったゼロ頻度問題を防ぐためにスムージングとかいう方法を使うよ,ということはナイーブベイズ言語モデルの話と一緒に出てくる

このとき,最初に必ず出てくるといっても過言でない方法がラプラススムージングと呼ばれる方法.これは,

  • p_A = \frac{(A+1)}{(A+B+C+3)}
  • p_B = \frac{(B+1)}{(A+B+C+3)}
  • p_C = \frac{(C+1)}{(A+B+C+3)}

というように,各事象が「1回出現した」とみなして,観測値に1を足してあげる方法.もうちょっと一般化すると,1ではなくmを足して

  • p_A = \frac{(A+m)}{(A+B+C+3m)}
  • p_B = \frac{(B+m)}{(A+B+C+3m)}
  • p_C = \frac{(C+m)}{(A+B+C+3m)}

という形で計算したりする.

実はこのmという数が,多項分布の事前分布としてのDirichlet分布のパラメータだったりする.「事前知識」として事象の出現に偏りがあることがわかっていれば,mを全ての事象で等しくする必要はない.

ラプラススムージングや加算法などが,実はDirichlet分布を事前分布とする多項分布のMAP推定である,ということがわかってなんだかすっきり,という話.また,それまでよくわからなかったDirichlet分布のパラメータ\alpha_kが急に身近なものに感じられてくるというちょっといい話.

[謝辞]このPDFは優秀な後輩であり,人生の先輩であるS君にレビューしていただきました.この場を借りて改めて感謝申し上げます.ゆとりに難しそうな部分はS君に教わりました.そして何か間違いがあってもそれは私のせいです.