前回の記事で、アヤメの品種データを使ったクラスタリングの例を紹介した。
今回はクラスタリングしたデータを可視化する方法について、サンプルコードを交えながら紹介する。
標準化したデータをクラスタリングする
クラスタリングついては前回の記事で詳しく取り上げたので、ここでは割愛する。
import pandas as pd from sklearn.datasets import load_iris from sklearn.cluster import KMeans # データセットの読み込み data_set = load_iris() df = pd.DataFrame(data_set.data, columns=data_set.feature_names) # 標準化 from sklearn.preprocessing import StandardScaler sc = StandardScaler() clustering_sc = sc.fit_transform(df) # クラスタリング kmeans = KMeans(n_clusters=3, random_state=0) clusters = kmeans.fit(clustering_sc) df['cluster'] = clusters.labels_ df.head()

前回紹介したコードと違うのは、クラスタリングを行うデータを標準化しているところだ。
アヤメのデータは4つの変数から構成されており、「sepal length」と「petal width」では平均値が大きく異なる。
このように単位が大きく異なるデータは、標準化(平均0・分散1のデータに変換)をするべきである。
主成分分析を用いて2次元データに変換する
先述のとおり、今のままでは4次元データになっているので、2軸のグラフに可視化するためには「次元削除」を行わなければならない。
今回は次元削除の代表的手法である「主成分分析」を用いて、2次元データに変換する。
# 次元削除 from sklearn.decomposition import PCA x = clustering_sc pca = PCA(n_components=2) pca.fit(x) x_pca = pca.transform(x) pca_df = pd.DataFrame(x_pca) pca_df['cluster'] = df['cluster'] pca_df.head()

主成分分析は、多変数データをより少ない指標や、変数同士を組み合わせた合成変数に要約する分析手法だ。
出力されたデータを見ると、4つの変数が二つの合成変数に要約されたことがわかる。
これで2次元データとなったので、グラフにプロットすることができるようになった。
データの可視化
あとはmatplotlibを使って散布図に描画するだけだ。
import matplotlib.pyplot as plt %matplotlib inline for i in df['cluster'].unique(): tmp = pca_df.loc[pca_df['cluster'] == i] plt.scatter(tmp[0], tmp[1])

for文を使ってクラスター毎にデータをプロットし、アヤメのデータを3種に分類することができた。