以前、アヤメの品種データを使った機械学習のうち「分類」のサンプルコードを紹介した。

「分類」は記事内でも紹介しているとおり、過去の特徴量データを学習させたモデルを使い、決められた目的変数を求める「教師あり学習」にあたるが、今回行う「クラスタリング」は目的変数を持たない「教師なし学習」にあたる。

クラスタリングは、あるデータ群の中から特定のパターンを見つけ出す時に使う分析手法だ。

今回は、scikit-learnで提供されているアヤメの品種データを使って、クラスタリングを行う方法を紹介する。

データセットの用意

まずはライブラリ・データセットを読み込む。

import pandas as pd
from sklearn.datasets import load_iris

data_set = load_iris()
df = pd.DataFrame(data_set.data, columns=data_set.feature_names)

print(df.shape)
df.head()

k平均法を用いたクラスタリングの実行

クラスタリングにはいくつかの手法があるが、今回は「k平均法」と呼ばれる手法を使う。

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3, random_state=0)
clusters = kmeans.fit(df)
df['cluster'] = clusters.labels_

print(df['cluster'].unique())
df.head()

3行目で機械学習モデルを用意しており、KMeansの第一引数n_clustersには分類する数を指定している。

4行目でクラスタリングの実行。

5行目で元のデータフレームに、分類されたクラスター(連番)を「cluster」列として連結している。

出力結果は以下のとおり。

右端に新たに「cluster」列が加わり、0〜2の分類値が追加されている。

たったこれだけのコードで、データの特徴量からパターンを分類するクラスタリングを行うことができる。
Pythonのライブラリはかなり扱いやすい。