LoginSignup
1
2

More than 3 years have passed since last update.

K-means法によるクラスタリングと主成分分析(初心者)

Posted at

はじめに

 この記事はpythonのpandasを使ったデータ分析を進める際に有効活用できる、K-means法(データクラスタリング)と主成分分析について記載します。
 クラスタリングを理解するためには、平均、偏差、標準化などの知識を事前に持っておくと良いです。
 【大学4年間の統計学が10時間でざっと学べる】という本の第二章までの知識があればいいと思います。
 あらかじめpandasをpdという名前でimportしてます。

K-means法とは

 k個のクラスタに分類分けするアルゴリズム

主成分分析とは

 次元数を減らす手法
 (3個以上の変数を保持するデータを平面に出力するのは難しいので、次元数を減らすことで平面にわかりやすくプロット可能になる)

Scikit-learnからK-meansで使うライブラリのimport

from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

Scikit-learnから主成分分析で使うライブラリのインポート

from sklearn.decomposition import PCA

データの標準化

 読み込んだライブラリからfit_transformを使い、標準化を実行

 前提:あらかじめpandasなどで分析対象データを読み込み/編集、以下の変数で作成
    (以下データにはmean, median, max, minなど数値データを格納)
    データ変数名: an_data

sc = StandardScaler()
clustering_sc = sc.fit_transform(an_data)

K-meansによるクラスタリング

KMeansのオプションであるrandom_stateに数値を設定すると、次回以降も同じ数値でのオプション指定することで同じ結果が得られる。(デフォルトはrandom_state=Noneであり、毎回違う乱数で処理される)

kmeans = KMeans(n_cluster=<クラスタの数>, random_state=0)
clusters = kmeans.fit(clustering_sc)

 クラスタリング結果の表への出力

an_data["result_clustering"] = clusters.labels_
an_data.head()

主成分分析

hoge = clustering_sc
pca = PCA(n_components=2)  # 二次元平面に出力するため、次元数は2を指定
pca.fit(hoge)
hoge_pca = pca.transform(hoge)
pca_data = pd.DataFrame(hoge_pca)

グラフ出力

 グラフ表示準備

import matplotlib as plt
%matplotlib inline         # jupyterでグラフ表示のため

 クラスタ化したので、クラスタラベルごとの散布図で出力してみる

for i in an_data["result_clustering"].unique():
    tmp = pca_data.loc[pca_data["result_clustering"] == i]
    plt.scatter(tmp[0], tmp[1], label=i)
plt.legend()
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2