Scikit - Learn を使った K - Means++ クラスタリング

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、Python の scikit-learn ライブラリを使って K-Means++ の初期化について学びます。K-Means++ は、類似性に基づいてデータをグループ化するための人気のあるアルゴリズムです。k-means のデフォルトの初期化として使用されます。この実験では、サンプルデータを生成し、k-means++ からシードを計算し、サンプルデータと並べて初期シードをプロットします。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

サンプルデータを生成する

scikit-learn ライブラリのmake_blobs関数を使ってサンプルデータを生成します。この関数は、クラスタリング用の等方性ガウスブロブを生成します。4 つの中心を持つ 4000 個のサンプルを生成します。

## Generate sample data
n_samples = 4000
n_components = 4

X, y_true = make_blobs(
    n_samples=n_samples, centers=n_components, cluster_std=0.60, random_state=0
)
X = X[:, ::-1]

k-means++ からシードを計算する

scikit-learn ライブラリのkmeans_plusplus関数を使って、k-means++ からシードを計算します。この関数は、k-means クラスタリングに使用される初期クラスタ中心を返します。k-means++ を使って 4 つのクラスタを計算します。

## Calculate seeds from k-means++
centers_init, indices = kmeans_plusplus(X, n_clusters=4, random_state=0)

初期シードとサンプルデータを並べてプロットする

matplotlib ライブラリを使って、初期シードとサンプルデータを並べてプロットします。初期シードは青い点として表示され、サンプルデータは色付きの点として表示されます。

## Plot init seeds along side sample data
plt.figure(1)
colors = ["#4EACC5", "#FF9C34", "#4E9A06", "m"]

for k, col in enumerate(colors):
    cluster_data = y_true == k
    plt.scatter(X[cluster_data, 0], X[cluster_data, 1], c=col, marker=".", s=10)

plt.scatter(centers_init[:, 0], centers_init[:, 1], c="b", s=50)
plt.title("K-Means++ Initialization")
plt.xticks([])
plt.yticks([])
plt.show()

まとめ

この実験では、Python の scikit-learn ライブラリを使って K-Means++ の初期化について学びました。サンプルデータを生成し、k-means++ からシードを計算し、初期シードとサンプルデータを並べてプロットしました。K-Means++ は、類似性に基づいてデータをグループ化するための人気のあるアルゴリズムであり、k-means のデフォルトの初期化として使用されます。