DISTRICT 37

なにか

Pythonでクラスタ分析

俺たちのirisでクラスタ分析を行う。

クラスタ分析とは

機械学習の一つで教師なし学習に分類される。データの特徴をプログラムが判定して、それぞれのクラスタに分けることが出来る。

クラスタリング分析は一般的にK-means法が使われる。データに対してまずは適当なクラスタに振り分けてその中心を計算する。その中心に対してそれぞれのデータがもっとも近い中心にクラスタを振り分けなおす。再振り分け後にその中心を計算し、、、と続けていき、中心があまり動かなくなってきたところで終了とする。つまりどういうことだってばよ?っていうのはこのサイトで視覚的に理解ができる。

tech.nitoyon.com

クラスタリングを行うことで、そのクラスタに属するデータがどのような傾向にあるかを調べることが出来る。 結果を受けてレコメンドやマーケティングなどにも適用することが可能だ。

Pythonで実装

scikit-learnにKMeansが用意されているのでそれを使う。基本的にデータとクラスタリング数をKMeansに渡すだけで結果が得られる。

最後の図にはクラスタリング後のデータに対してその中心地もプロットした。

どれくらいのクラスタ数にするか

これは完全に作業を行う人の主観がはいる。どれくらいのクラスタ数が適当なのか正しい答えはない。反対に言えば恣意的に分析結果を操作することが可能ともいえるので注意が必要だ。

とはいえ、これくらいでいいのではないかなという手法はある。「シルエット分析」と呼ばれている方法だ。そのシルエット分析に関してはscikit-learnの公式に説明があるので、参照するといい。

Selecting the number of clusters with silhouette analysis on KMeans clustering — scikit-learn 0.18 documentation

要は分類数に対してそれっぽく(できれば均等に)データが集まっていればそれがクラスター数の最適な値だということになるのだ。