[scikit-learn] 12. GaussianMixtureモデルによるクラスタリング

matplotlib

はじめに

sklearn.mixtureのGaussianMixtureで混合ガウスモデルによるクラスタリングができる。これは、データを複数のガウス分布の重ね合わせとして分類する手法となる。ここではガウス分布に従う2つのデータに対してクラスタリングを行い、対数尤度を等高線で表示した例について説明する。

解説

モジュールのインポートなど

バージョン

データの生成

中心 (5, 0)の等方的ガウス分布に従うデータと中心 (-5, 0)の横にのびたガウス分布に従うデータをそれぞれ300こ、200こ作成する。

2つのデータをnp.vstack()で結合する。

Gaussian Mixture Modelの定義とトレーニング

2成分のGaussian Mixture Modelを定義する。成分数はn_components=2で2成分とし、covariance_typeで使用する共分散パラメーターのタイプを選択する。ここでは”full”とした。そのほかに、‘tied’, ‘diag’, ‘spherical’がある。

clf.fit(X_train)でトレーニングする。

データの分類

clf.predict(X_train)でデータを分類することができる。

等高線用データの作成

np.meshgridで等高線用の2Dデータを作成し、z軸データとして、-clf.score_samples(XX)で各データポイントの確率をlogで取得する。

結果の表示

ax.scatter(X_train[:, 0], X_train[:, 1],s=1,c=labels)により、各成分ごとに色を分けた散布図を表示できる。

モデルから得られるデータ

mean_

各成分の平均の値が得られる。

weights_

各成分の分率が得られる。

covariances_

各成分の共分散パラメータが得られる。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

sklearn.mixture.GaussianMixture — scikit-learn 0.24.2 documentation
Density Estimation for a Gaussian mixture — scikit-learn 0.24.2 documentation

コメント