本ページは 混合ガウスモデル(Gaussian Mixture Model)を多角的に解説します。 上のチップは、 検索・関連語の手がかりです。
混合ガウスモデル(Gaussian Mixture Model, GMM)は、 確率モデル・教師なし学習の 定番。 「複数の正規分布の重み付き和」でデータを表現します。 K-means より柔軟で、 各クラスタの形状(楕円)と所属確率を出力するため、 意思決定支援に向きます。
K-means と GMM の比較:
| 項目 | K-means | GMM |
|---|---|---|
| クラスタ形状 | 球状のみ | 楕円(任意の共分散) |
| 所属 | ハード(0 or 1) | ソフト(確率) |
| 確率モデル | なし | あり(生成モデル) |
| 計算量 | 軽い | 重め |
| 使い分け | 大規模・球状仮定 | 密度推定・形状の柔軟さ |
例:身長・体重の散布図で、 男女別の楕円クラスタを GMM で推定。 K-means だと「身長 160cm, 体重 60kg の人は男女どちら?」が二択だが、 GMM は「男性 30%, 女性 70%」と確率で答える。
EM アルゴリズム:
例:身長・体重データ(n=1000)に K=2 の GMM を当てはめる:
| コンポーネント | 混合比 $\pi$ | 平均 $\mu$(身長, 体重) | 解釈 |
|---|---|---|---|
| 1 | 0.52 | (170, 68) | 男性集団 |
| 2 | 0.48 | (157, 52) | 女性集団 |
K を 1, 2, 3, 4 と変えて BIC を計算し、 最小の K を採用するのが標準手順。
最小コードで動かしてみる例:
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)) |