前回の記事で、アヤメの品種データを使ったクラスタリングの例を紹介した。
今回はクラスタリングしたデータを可視化する方法について、サンプルコードを交えながら紹介する。
標準化したデータをクラスタリングする
クラスタリングついては前回の記事で詳しく取り上げたので、ここでは割愛する。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 | 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次元データに変換する。
01 02 03 04 05 06 07 08 09 10 11 | # 次元削除 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を使って散布図に描画するだけだ。
1 2 3 4 5 6 7 | 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種に分類することができた。
