EM アルゴリズム & GMM シミュレーター 戻る
機械学習・確率モデル

EM アルゴリズム & Gaussian 混合モデル シミュレーター

EM (Expectation-Maximization) アルゴリズムによる GMM (Gaussian Mixture Model) の収束をシミュレートします。混合成分数 K、サンプル数、真の重なり度、共分散型を変えると、対数尤度の収束カーブ・AIC/BIC によるモデル選択・クラスタリング品質 (ARI) がリアルタイムで分かります。

パラメータ設定
混合成分数 K
GMM のガウス成分の数
サンプル数 N
EM 反復回数
許容回数の上限。許容誤差を満たせばこれより早く停止
真の重なり度
クラスタ同士がどれだけ重なっているか (0=完全分離)
共分散型
full=任意の楕円、diag=軸並行楕円、spherical=円
収束許容 (tol)
対数尤度の変化量がこの値を下回ったら収束と判定
計算結果
推定パラメータ数
反復回数 (収束 or 上限)
最終対数尤度 log L
AIC
BIC
クラスタリング ARI
GMM クラスタリング — 楕円が反復ごとに更新

2D 散布データに K 個のガウス楕円をフィッティングする様子。楕円は共分散行列の主軸(1σ)を表し、EM 反復ごとに位置・形状・向きが更新されます。色は成分ごとの所属確率を表します。

対数尤度 log L の収束過程
モデル選択 — AIC / BIC vs K
理論・主要公式

$$Q(\theta|\theta^{old}) = E_{Z|X,\theta^{old}}[\log p(X,Z|\theta)],\quad BIC = -2\log L + k\log N$$

Q は完全データ対数尤度の期待値。E-step で事後確率 γ(z) を計算し、M-step で Q を最大化するパラメータ θ を求める。Q は単調非減少で収束が保証される。

$$p(x) = \sum_{k=1}^{K} \pi_k\,\mathcal{N}(x|\mu_k,\Sigma_k),\quad \sum_k \pi_k = 1$$

GMM の確率密度。π_k は混合比、μ_k は平均、Σ_k は共分散行列。K-means は Σ_k=σ²I かつハード割り当ての特殊ケース。

$$AIC = -2\log L + 2k,\quad \mathrm{ARI} \in [-1, 1]$$

AIC はパラメータ数 k によるペナルティ、BIC はサンプル数 N による厳しいペナルティ。ARI (Adjusted Rand Index) は 1 で完全一致、0 で偶然レベル。

EM アルゴリズム — Gaussian混合モデル (GMM)

🙋
クラスタリングって K-means しか知らないんですけど、「GMM」って何が違うんですか?同じクラスタを見つけるんですよね?
🎓
同じ目的だけど、見方が大きく違うんだ。K-means は「点はどれか1つのクラスタに 100% 属する」と決め打ちするハード割り当て。GMM は「この点は成分Aに 70%、成分Bに 30% の確率で属する」と確率で表現するソフト割り当てなんだよ。さらに GMM は各クラスタを「平均と共分散行列を持つ正規分布」としてモデル化するから、楕円形のクラスタや向きを持つクラスタもうまく拾える。実は K-means は GMM の特殊ケース(共分散が球状で、確率を 0/1 に丸めたもの)だと数学的に示せるんだ。
🙋
なるほど、GMM のほうが柔軟なんですね。でも、その「平均と共分散」をどうやって決めるんですか?K-means みたいに重心を更新していけば良いんですか?
🎓
そこで登場するのが EM (Expectation-Maximization) アルゴリズムだよ。手順は2ステップの繰り返しで、E-step では今のパラメータを使って「各点が各成分に属する確率(事後確率 γ)」を計算する。M-step ではその γ を重みとして「平均、共分散、混合比」を最尤推定で更新する。これを尤度がほとんど変わらなくなるまで繰り返す。すごいのは「対数尤度が単調非減少」が数学的に保証されていること。だから少なくとも「逆戻りはしない」ことが分かっているんだ。
🙋
逆戻りしないなら、必ず正解にたどり着けるってことですか?
🎓
残念ながら、それが EM の最大の弱点なんだ。「単調非減少」は「グローバル最適」ではない。山登り法と同じで、近くの小さな丘で止まってしまう局所最適に陥る可能性がある。左の「真の重なり度」を上げてみて。クラスタが重なるほど局所最適のリスクが上がるよね?対策の定番は K-means++ で良い初期値を与えること、それから「複数の初期値で実行して最も尤度が高い結果を採用する」マルチスタート。実務では当たり前に併用されているテクニックだ。
🙋
混合成分数 K はどう決めるんですか?K-means だとエルボー法とかありましたよね…
🎓
GMM では情報量規準の AIC や BIC を使うのが定番だよ。下の「AIC/BIC vs K」グラフを見て。K が小さすぎるとデータをモデルしきれず尤度が低い。大きすぎるとパラメータ数が増えすぎてペナルティが効く。中間に最適 K が U字の底として現れる。BIC は AIC より大きな K に厳しいペナルティをかけるから、よりシンプルなモデルを選びがちだね。あと、共分散型を full から diag、spherical と制限していくとパラメータ数が減るから、データ量が少ないときは spherical のほうが BIC 的に有利になることもある。
🙋
実際に EM・GMM はどんなところで使われているんですか?
🎓
めちゃくちゃ多いよ。画像分割(ピクセルの色を GMM でクラスタリングして領域に分ける)、音声認識の音響モデル(昔の HMM-GMM はこれだ)、異常検知(正常データを GMM でフィットして、低確率の点を異常とする)、生物学のシングルセル解析(細胞集団の同定)、金融のリスクモデル(収益分布の裾を多峰でモデル化)… 確率モデル+EM の組み合わせは、機械学習の最も基本的かつ強力な道具のひとつなんだ。

よくある質問

EM (Expectation-Maximization) は、隠れ変数を持つ確率モデルの最尤推定法です。Dempster, Laird, Rubin が 1977 年に統一的に定式化しました。E-step では現在のパラメータのもとで隠れ変数の事後確率(GMM では各点がどのガウス成分に属するかの確率)を計算し、M-step ではその事後確率を重みとしてパラメータ(平均・分散・混合比)を最尤更新します。E と M を交互に繰り返すと対数尤度が単調非減少で収束することが理論的に保証されており、これが EM の最大の魅力です。
K は AIC や BIC を最小化する値を選ぶのが定石です。AIC = -2·logL + 2k、BIC = -2·logL + k·log(N) で、k はパラメータ数、N はサンプル数です。BIC のほうが大きな K にペナルティが強く、よりスパースなモデルを好みます。本ツールの「AIC/BIC vs K」グラフを見ると、K が小さすぎるとデータをモデル化しきれず尤度が低く、大きすぎるとパラメータ過多でペナルティが効いて、中間に最適点が見えます。実務ではこれに加えて交差検証や、業務ドメインから来る制約(クラスタ数の事前知識)も併用します。
EM の最大の欠点は初期値依存です。乱数の初期値で開始すると、対数尤度が悪い局所最適に収束してしまうことがあります。対策の定番は K-means++ による初期化で、まず K-means で大まかなクラスタ中心を求め、その結果を GMM の初期平均として使います。さらに「複数の初期値で並列実行し、最終的に最も対数尤度が高い結果を採用する」(multi-start)も広く使われます。本ツールでは「真の重なり度」を上げると局所最適化リスクが上昇し、判定が WARN になります。
K-means は GMM の特殊ケースとみなせます。GMM は各クラスタを任意の共分散行列を持つガウス分布で表し、点はどのクラスタに属するか「確率」で表現されます(ソフト割り当て)。一方 K-means は共分散を球状(単位行列の倍率)に固定し、点を最近接クラスタに 0/1 で割り当てます(ハード割り当て)。GMM のほうが楕円形や向きを持つクラスタを表現でき、確率としての解釈もできますが、その分パラメータ数が増え計算コストも高くなります。本ツールの「共分散型」で full / diag / spherical を切り替えると、パラメータ数の違いが見えます。

実世界での応用

画像処理・コンピュータビジョン:古典的な画像分割では、各ピクセルの色(RGB ベクトル)を GMM でクラスタリングすることで、空・草・道路・人物といった領域を確率的に分離できます。背景差分(監視カメラの動体検出)では「各ピクセルの色履歴を GMM でモデル化し、低確率の色が来たら動体」と判定する手法(MOG: Mixture of Gaussians)が長年定番で、OpenCV にも実装されています。

音声認識・話者識別:ディープラーニング以前の音声認識は HMM-GMM の組み合わせが主流でした。音素ごとに HMM の各状態に対応する GMM を学習し、入力音声がどの音素列に最も尤もらしいかを Viterbi 探索で求めます。現在の DNN-HMM 系でも、話者識別(ある声がどの人物か)には i-vector や x-vector に加えて GMM-UBM (Universal Background Model) が依然として広く使われています。

異常検知・品質管理:正常状態のセンサーデータを GMM でフィッティングしておき、新しいデータの尤度がしきい値以下なら異常と判定するアプローチは、工場のモーター監視、ネットワーク侵入検知、医療データの異常検出などで使われます。one-class SVM や Isolation Forest と並ぶ「教師なし異常検知」の基本ツールです。

生物・医療・金融:シングルセル RNA-seq では、各細胞の遺伝子発現ベクトルを GMM でクラスタリングして細胞タイプを同定します。fMRI 解析、フローサイトメトリーの自動ゲーティングも GMM がよく使われる領域です。金融では、収益率分布の裾の厚さを単一ガウスでは表現できないため、複数ガウスの混合でテールリスクをモデル化することがあります。

よくある誤解と注意点

まず最も多い誤解が、「EM はグローバル最適に収束する」というもの。EM が保証するのは「対数尤度の単調非減少」だけで、グローバル最適ではありません。特にクラスタが重なっていたり、K を多めに取った場合、初期値次第で全く違う解に収束します。実務では必ずマルチスタート(複数の初期値で実行し最良を採用)か、K-means++ のような賢い初期化を併用してください。本ツールでも「真の重なり度」が高いと局所最適化リスクが上昇する設計になっています。

次に、「K が大きいほど良いモデル」という勘違い。確かに K を増やすほどデータへの当てはまり(対数尤度)は良くなりますが、これは過学習です。極端な話、K=N にすれば各点を1個のガウスで覆い尽くせるので尤度は最大化されますが、新しいデータには全く役に立ちません。AIC や BIC、交差検証によるモデル選択は「複雑さに対するペナルティ」を入れることで過学習を防いでいます。「尤度が上がったから K を増やそう」ではなく、「BIC が下がるなら K を増やそう」と考えるのが正しい姿勢です。

最後に、「共分散行列の特異化」という実装上の落とし穴。EM の M-step では各成分の共分散行列を更新しますが、ある成分が1点だけを抱え込むと共分散がゼロ行列(特異)になり、その点での密度が無限大に発散します。すると対数尤度が無限大に飛び、計算が破綻します。対策は (1) 共分散に小さな正則化項を加える(Σ + εI)、(2) スパースな成分は途中で削除して K を減らす、(3) 共分散型を diag や spherical に制限する、などです。scikit-learn の GaussianMixture は reg_covar パラメータでこれを自動処理しています。

使い方ガイド

  1. 混合成分数 K を 2〜8 の範囲で設定し、サンプル数 n は 100〜5000 の範囲から選択します
  2. 反復回数の上限を設定(通常 50〜500 回)し、真の重なり度を 0.1(明確な分離)から 0.9(高度な重複)まで調整します
  3. 「実行」ボタンをクリックすると、EM アルゴリズムが対数尤度の収束を追跡し、推定パラメータ数・AIC・BIC・クラスタリング ARI をリアルタイム表示します
  4. 共分散型を「球面」「対角」「完全」から選択すると、モデル複雑性と収束速度の変化が観測できます

具体的な計算例

K=3 成分、n=1000 サンプル、重なり度 0.5 の場合:推定パラメータ数は 3×(2+1+1)=12 個となります。反復回数 150 回で対数尤度が -2450 に収束し、AIC=4924、BIC=5012 が算出されます。同一データで K=2 と K=4 を比較すると、BIC は K=3 で最小値を示し、クラスタリング ARI は 0.92 に達して真のラベルとの一致度が高いことが確認できます。球面共分散では計算が 50% 高速化されます。

実務での注意点

  1. BIC による成分数選択は特に n>500 のとき安定しますが、n<100 では過学習を招くため AIC との併用が必須です
  2. 重なり度 0.8 以上の場合、初期化方法(k-means++)の感度が上昇するため、3〜5 回の異なる初期値での実行比較を推奨します
  3. 完全共分散モデルは K=4 を超えると数値不安定性が顕著になるため、特に n<500 では対角共分散への切り替えを検討してください
  4. 対数尤度が単調非減少でない場合は反復数が不足しているサイン(上限を +100 増加)、または初期値がローカル最適解に陥っている状態です