クラスタ分析(k-means法)を実装【Pythonでデータ分析】

  • このエントリーをはてなブックマークに追加
スポンサーリンク

この記事を読むのに必要な時間は約 3 分です。

 

クラスタ分析(クラスタリング)とは?

データや人の集合に対して、何かしらの意味を持たせてグループ化する手法です。

無印のデータに、ラベル付けしてまとめていくようなイメージですね。

例えば、学校の成績で「国語」と「社会」の評価が高ければ「文系」のクラスタに分類できる(ラベル付けする)といった感じです。

今回は、学校で生徒の成績がまとまった通信簿データが集められたと仮定し、クラスタリングしたいと思います。

環境

Google Colab

※以降のコードは全てGoogle Colab上で実行しています。

手順

分析用データの準備

分析に使用するデータは、csvから読み込んでもBigQueryでも、なんでも構いません。

今回は下の図表のような感じで、生徒と科目別の成績を想定しています。(通信簿のイメージです。)

科目別の値が、1〜5(全く当てはまらない〜とても当てはまる)の5段階で数値化されているとします。

上記はcsvから読み込んでDataframe形式で表示する例です。

k-meansクラスタリングの実施

k-means法(K平均法)とは、クラスタリングの定番とも言える手法です。

ポイントは、データとデータの距離を基準にして、データのまとまりを作ることにあります。

scikit-learnなど分析に必要なライブラリなどをインポートしていきます。

読み込んだDataframeをKMeansに取り込むため、下記のような変更を加えます。

ここでは、分類するクラスタ数を決めるため、

クラスタ数1から16までのケースでクラスタリングを実行し、結果をプロットしていきます。

最適なクラスタ数は出力された図を見て人間が判断します。

下記の図がプロットした結果です。

横軸はクラスタ数、縦軸はinertiaの値(Distortion)です。

inertia_とは、各クラスター内の二乗誤差(歪み)のことで、k-meansクラスタリングを最適化していく過程で最小化を目指す指標です。

縦軸の降り幅がなだらかになったところをクラスタ数の基準とすることが多いです。(ここでのクラス多数は5くらいとします。)

最適化されたクラスタ数を元に、クラスタリングを実施します。

出力結果を確認すると、生徒ごとにクラスタ番号(ラベル)が割り振られたことがわかります。

 

スポンサーリンク

  • このエントリーをはてなブックマークに追加
スポンサーリンク