[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ファイル)

参考

GaussianMixture
Gallery examples: Comparing different clustering algorithms on toy datasets Demonstration of k-means assumptions Density...
Density Estimation for a Gaussian mixture
Plot the density estimation of a mixture of two Gaussians. Data is generated from two Gaussians with different centers a...

コメント

  1. chrono より:

    32行目でclfの前にマイナスをつけていますが、これが何をやっているのかよく分からなので、教えていただけないでしょうか?

    • sabopy より:

      これは負の対数尤度を求めていることになります。
      尤度は値がひくいほど尤もらしいので、負の対数尤度にすると大きい値の方が尤もらしくなります。