MeanShift(クラスタ分析)【Pythonとscikit-learnで機械学習:第12回】

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

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

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

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

MeanShiftはクラスター数が分からない場合に、データをクラスターに分類する手法です。

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

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

[scikit-learnのマップ]

教師なしデータ→クラスター数不明→サンプル数1万以下→[MeanShift・Clustering]

です。

MeanShift・Clusteringの実装

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

まずは、実際のデータ、kMeansによる分類(クラスター数を3と規定)、MeanShift・Clusteringによる分類の結果を見てみます。

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

一方で、MeanShiftでの結果はクラスター数が2となり、中心点は()の位置となりました。

クラスター数を未知にしており、実際とは異なる結果となりました。

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

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

ms = cluster.MeanShift(seeds=X_norm)

MeanShiftは、おおざっぱにはKMeansをクラスター数を仮定せずに行う手法です。

その際に規定の距離より近くなったクラスターは合体させて1つにしてしまいます。

ここでseedsは最初のクラスターを決めており、最初は各データを中心とするデータ数分のクラスターを用意しています。

ここで規定の距離が非常に重要になり、デフォルトで計算されますが、自分で設定することもできます。

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

MeanShift・Clusteringの心

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

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

scikit-learnのMeanShiftの解説ページ

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

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

その際にいくつのクラスターが存在するのかを、指定せずにクラスタリングします。

その方法は上で説明したとおり、KMeansをベースとしつつ、近いクラスターはまとめていきます。

個人的には、MeanShiftは大雑把すぎて好きではないです。

次に紹介するVBGMMの方が良いです。

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

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

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