GMM・クラスタリング(クラスタ分析)【Pythonとscikit-learnで機械学習:第11回】

GMM・クラスタリングによって、データをクラスタリング解析する手法を、実装・解説します。

本シリーズでは、Pythonを使用して機械学習を実装する方法を解説します。

各アルゴリズムの数式だけでなく、その心、意図を解説していきたいと考えています。

本記事ではGMM・Clusteringを実装します。

GMMはGaussian mixture modelsの略称です。

複数のガウス分布を仮定して、各データがどのガウス分布に所属するのかを決定し、クラスター分析します。

以下のscikit-learnマップの黒矢印に対応します。

[scikit-learnのマップ]

教師なしデータ→クラスター数既知→サンプル数1万以下→kMeans機能せず→[GMM・Clustering]

です。

GMM・Clusteringの実装

本記事では、ワインの分類データでGMMを実装します。

まずは、実際のデータ、kMeansによる分類、GMM・Clusteringによる分類の結果を見てみます。

上図、真ん中のKMeansは中心点()からの距離でクラスターが決まります。

一方で、GMMの場合は3つのガウス分布の分散が軸方向に独立に決められるため、ひしゃげて傾いた楕円形で所属するクラスターを描くことが出来ます。

そのため、KMeansと少し異なる結果となっています。

実装コードは以下の通りです。

解説6の部分が新しいので解説します。

gmm=mixture.GaussianMixture(n_components=3,covariance_type=’full’)

これはクラスター数を3と設定し、covariance(共分散)行列を各ガウス分布で異なるものを設定しています。

それでは「結局、GMM・Clusteringって何をやっていたの?」を説明します。

GMM・Clusteringの心

正確な情報は以下をご覧ください。

scikit-learnのクラスタ解析の解説ページ

scikit-learnのGMMの解説ページ

GMM・Clusteringは教師なし学習の一種です。

データを自動的にクラスターに分けます。

指定したクラスター数分のガウス分布の平均値(中心点)と共分散行列(分布の傾きと広がり具合)を推定します。

この推定はEMアルゴリズム(expectation-maximization)で求めています。

EMアルゴリズムの解説は、以下の本が丁寧で分かりやすいです。

続・わかりやすいパターン認識 教師なし学習入門

やっていることの意図は、ほとんどKMeansと同じです。

(※というか、KMeansもEMアルゴリズムの一種です)

1)まず、適当に分布を決めます

2)各データがどのガウス分布に所属している確率が最も高いかを求め、ラベリングします

3)各ラベリングされたデータを最も生成する確率が高いガウス分布を求めます

2)求めたガウス分布で、各データがどのガウス分布に所属している確率が最も高いかを求め、ラベリングします

3)各ラベリングされたデータを最も生成する確率が高いガウス分布を求めます

2), 3)を、変化がなくなるまで繰り返します。

やっていることはそれだけです。

使用するうえで、KMeansとは異なる良い点が2つあります。

KMeansが同心円状を仮定するのに対して、GMMは傾いた楕円形のクラスターを仮定することができます。

またガウス分布を仮定するので、各データがどのクラスターに所属するのか確率を求めることができます。

以上、Pythonとscikit-learnで学ぶ機械学習入門|第11回:GMMクラスタリングでのクラスター分析でした。

次回は、MeanShiftについて解説します。

【目次】Python scikit-learnの機械学習アルゴリズムチートシートを全実装・解説
scikit-learnのアルゴリズムチートマップで紹介されている手法を、全て実装・解説してみました。 ...