導入
クラスタリングの結果は、色分けした散布図にすると一目で伝わります。どのグループがどこに固まっているか、目で確かめましょう。
説明
散布図の c= に各点のクラスタ番号を渡すと、グループごとに色が変わります。中心も重ねて描きます。
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
X, _ = make_blobs(n_samples=150, centers=3, cluster_std=1.0, random_state=0)
model = KMeans(n_clusters=3, random_state=0, n_init=10)
labels = model.fit_predict(X) # 学習と予測を一度に
centers = model.cluster_centers_
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap="viridis", s=30) # 点を色分け
plt.scatter(centers[:, 0], centers[:, 1],
c="red", marker="X", s=200, label="centers") # 中心
plt.title("K-means Clustering")
plt.legend()
plt.show()
fit_predict は「学習して、そのままクラスタ番号を返す」便利メソッドです。c=labels で点をグループの色に、赤い×印がグループの中心です。3つのかたまりが、それぞれ別の色でまとまっているのが見えるはずです。
X[:, 0] は「全行の0列目」、X[:, 1] は「全行の1列目」。散布図の横軸・縦軸に使う定番の書き方です。
やってみよう
n_clusters を 4 にして色分けが変わるのを見てみましょう。cluster_std(生成時のばらつき)を 2.5 に上げると、かたまりが重なって分けにくくなる様子も観察できます。
演習
上のコードで n_clusters を 2 にしてクラスタリングし、散布図を表示してください(色分けは c=labels のまま)。
ヒント1を見る
KMeans(n_clusters=2, ...) にして labels = model.fit_predict(X)、あとはそのまま plt.show()。