Pythonで機械学習 K Meansでクラスタリング編

2017-07-05

ここでは、 scikit-learnk-means を実行してみる。

データセットは、以下で紹介している iris データセット を使用する。

パッケージの導入

このブログにある Python コードを実行するためのパッケージをインストールする。

pip install jupyter scikit-learn matplotlib scipy

実行環境は Jupyter Notebook を想定。実行方法は jupyter notebook
matplotlib の使い方は以下を参照。

k-means の実装

import matplotlib.pyplot as plt
from sklearn import cluster
from sklearn import datasets
# iris データセットをロード
iris = datasets.load_iris()
data = iris['data']
# k-means モデルの作成
# クラスタ数は 3 を指定
model = cluster.KMeans(n_clusters=3)
model.fit(data)
# クラスタリング結果ラベルの取得
labels = model.labels_
# 以降、結果の描画
# 1 番目のキャンバスを作成
plt.figure(1)
# ラベル 0 の描画
ldata = data[labels == 0]
plt.scatter(ldata[:, 2], ldata[:, 3], color='green')
# ラベル 1 の描画
ldata = data[labels == 1]
plt.scatter(ldata[:, 2], ldata[:, 3], color='red')
# ラベル 2 の描画
ldata = data[labels == 2]
plt.scatter(ldata[:, 2], ldata[:, 3], color='blue')
# x軸、y軸の設定
plt.xlabel(iris['feature_names'][2])
plt.ylabel(iris['feature_names'][3])
plt.show()
iris データセット

model の各項目は以下の通り。

  • cluster_centers_
    • クラスタの中心座標
  • labels_
    • 各点に付与されたラベル、つまり、クラスタリングの結果
  • inertia_
    • 各点からそれぞれが属するクラスタの中心までの距離の挿話

その他のクラスタリング手法

階層的凝集型クラスタリング

model = cluster.AgglomerativeClustering(n_clusters=3, linkage='ward')

非階層的クラスタリング Affinity propagation

model = cluster.AffinityPropagation()

おすすめ書籍

おすすめ記事