論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
混合ガウスモデル
Gaussian Mixture Model
教師なし学習
別称: GMM

🔖 キーワード索引

混合ガウスモデルGaussian Mixture Model教師なし学習GMM

本ページは 混合ガウスモデル(Gaussian Mixture Model)を多角的に解説します。 上のチップは、 検索・関連語の手がかりです。

💡 30秒で分かる結論

📍 文脈 — どこで使う概念か

混合ガウスモデル(Gaussian Mixture Model, GMM)は、 確率モデル・教師なし学習の 定番。 「複数の正規分布の重み付き和」でデータを表現します。 K-means より柔軟で、 各クラスタの形状(楕円)と所属確率を出力するため、 意思決定支援に向きます。

🎨 直感で掴む — 具体例で理解する

K-means と GMM の比較:

項目K-meansGMM
クラスタ形状球状のみ楕円(任意の共分散)
所属ハード(0 or 1)ソフト(確率)
確率モデルなしあり(生成モデル)
計算量軽い重め
使い分け大規模・球状仮定密度推定・形状の柔軟さ

例:身長・体重の散布図で、 男女別の楕円クラスタを GMM で推定。 K-means だと「身長 160cm, 体重 60kg の人は男女どちら?」が二択だが、 GMM は「男性 30%, 女性 70%」と確率で答える。

📐 定義・数式

【混合ガウスモデル】
$$p(\mathbf{x}) = \sum_{k=1}^{K} \pi_k \, \mathcal{N}(\mathbf{x} | \boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)$$
$K$ = コンポーネント数、 $\pi_k$ = 混合比、 $\mathcal{N}$ = 多変量正規分布

EM アルゴリズム:

【EM の E ステップ(負担率)】
$$\gamma_{ik} = \frac{\pi_k \mathcal{N}(\mathbf{x}_i | \boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)}{\sum_{j=1}^{K} \pi_j \mathcal{N}(\mathbf{x}_i | \boldsymbol{\mu}_j, \boldsymbol{\Sigma}_j)}$$
各点 $\mathbf{x}_i$ が各コンポーネント $k$ に属する確率

🔬 記号・要素の読み解き

$K$(コンポーネント数)
混ぜる正規分布の個数。 ハイパラ
$\pi_k$(混合比)
各コンポーネントの重み。 合計 1
$\boldsymbol{\mu}_k$
各コンポーネントの平均ベクトル
$\boldsymbol{\Sigma}_k$
各コンポーネントの共分散行列(クラスタの形状)
$\gamma_{ik}$(負担率)
点 $i$ がコンポーネント $k$ に属する事後確率
EM
E ステップ(負担率計算)と M ステップ(パラメータ更新)の繰り返し

🧮 数値例・実値計算

例:身長・体重データ(n=1000)に K=2 の GMM を当てはめる:

コンポーネント混合比 $\pi$平均 $\mu$(身長, 体重)解釈
10.52(170, 68)男性集団
20.48(157, 52)女性集団

K を 1, 2, 3, 4 と変えて BIC を計算し、 最小の K を採用するのが標準手順。

🐍 Python 実装例

最小コードで動かしてみる例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from sklearn.mixture import GaussianMixture
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
X = df[['高齢化率', '人口密度']].dropna()

# K=3 の GMM
gmm = GaussianMixture(n_components=3, random_state=0)
gmm.fit(X)
labels = gmm.predict(X)
probs = gmm.predict_proba(X)
print('混合比:', gmm.weights_)
print('BIC:', gmm.bic(X))

⚠️ よくある落とし穴

❌ K の選択
K が大きすぎると過学習。 BIC または交差検証で選ぶ。
❌ 初期値依存
EM は局所最適に陥る。 複数の初期値で実行(n_init で複数試行)。
❌ 特異共分散
1 つのコンポーネントに点が 1 個だと共分散が特異化。 reg_covar で正則化。
❌ 非ガウスデータ
データが本質的にガウスでないと、 強引にフィットしてしまう。
❌ 解釈の罠
「コンポーネント」が「真のクラスタ」と一致する保証なし。 ドメイン知識で検証。