old school magic

機械学習と統計とプログラミングについてちょっとずつ勉強していきます。

Infinite Gaussian Mixture Model (IGMM) の情報まとめ

Dirichlet Process Gaussian Mixture Model (DPGMM)とも。
Dirichlet Process Mixture Model が一番ググった時に引っかかりやすいかも。

この記事について

最近?流行りのノンパラメトリックベイズの一つで、ガウス混合モデルのノンパラメトリック版です。
混合数を自動敵に決定してくれるガウス混合モデルですね。
比較的実装が簡単だと言われるモデルですが、あまり実装例を見かけないモデルです。
IGMMの情報源と、実装している人の紹介をしようと思います。

概要

Google の栗原さんや、NTTコミュニケーション科学基礎研究所の持橋さんによる解説です。(リンク切れの場合はGoogle Scholar か何かに適当に投げてください。)

説明の流れとしては、ディリクレ過程→中華料理店過程→ギブスサンプリング、みたいな感じです。
ディリクレ過程のハイパーパラメータとして alpha があります。

実装

RasmussenさんによるIGMMの論文と、Mandelさんによるその実装です。
Mandelさんはmatlabでの実装をGitHubに公開しています。

MandelさんによるmatlabでのIGMM実装

サーベイ論文等で触れられることはあまりないのですが、IGMMはハイパーパラメータ(つまり alpha )も自動的に決定することができます。
階層ベイズでモデルを置いて、パラメータを更新し、中華料理店過程でクラスタ数を決定する、と言った流れです。(詳しくはRasmussen参照)
つまりギブスサンプリングをする回数だけ指定してあげればあとは勝手に計算してくれるわけです。
このコードは実際に動くので、matlabのライセンスをお持ちの方はぜひ試してみてください。

まだよく分かってないこと

  • 研究でIGMMを使っている人はRasmussenさんのモデルに基づいているのか、それとも alpha をハイパーパラメータとして残しているのか

Rasmussenさんのモデルは2000年発表なのでさすがに新しい方法が提案されてると思うのですがどうなんでしょう?最近のIGMM事情についてもうちょっと調べてみます。

Javaに移植しようと思っていたのですが、パラメータの事前分布にWishart分布とかあって挫折しました...
Javaベイズ統計はやっぱり難しいですね。
そのうちRかPythonで実装しようと思います。

最近流行りの手法って何でしょうね。deep learning はちゃんと調べたいです。