本文へスキップ
BecomeCoder

Python AIコース · 第5章 クラスタリング ― 正解なしでまとめる · レッスン17

クラスタリングを可視化する

ブラウザで完結

導入

クラスタリングの結果は、色分けした散布図にすると一目で伝わります。どのグループがどこに固まっているか、目で確かめましょう。

説明

散布図の 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_clusters4 にして色分けが変わるのを見てみましょう。cluster_std(生成時のばらつき)を 2.5 に上げると、かたまりが重なって分けにくくなる様子も観察できます。

演習

上のコードで n_clusters2 にしてクラスタリングし、散布図を表示してください(色分けは c=labels のまま)。

ヒント1を見る

KMeans(n_clusters=2, ...) にして labels = model.fit_predict(X)、あとはそのまま plt.show()

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、scikit-learn で本物の機械学習モデルをその場で訓練できます。scikit-learn を使う回は初回の読み込みに時間がかかります(数十秒かかることがあります)。本文の例をそのまま試したり、数値を書き換えたりして、結果の変化を確かめましょう(グラフ内の文字は英字で書きます)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。