二分法 K-Means と通常の K-Means の性能比較

Machine LearningMachine LearningBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このドキュメントは、通常の K-Means アルゴリズムと二分法 K-Means の性能を比較する手順に従ったチュートリアルです。このチュートリアルでは、クラスタ数を増やした場合のクラスタリングにおけるこれらのアルゴリズムの違いを示します。

VM のヒント

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

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

学習中に問題が発生した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。そうすると、迅速に問題を解決します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/cluster("Clustering") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/cluster -.-> lab-49071{{"二分法 K-Means と通常の K-Means の性能比較"}} sklearn/datasets -.-> lab-49071{{"二分法 K-Means と通常の K-Means の性能比較"}} ml/sklearn -.-> lab-49071{{"二分法 K-Means と通常の K-Means の性能比較"}} end

ライブラリのインポート

このステップでは、このチュートリアルに必要なライブラリをインポートします。

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import BisectingKMeans, KMeans

サンプルデータの生成

このステップでは、scikit-learn の make_blobs() 関数を使ってサンプルデータを生成します。2つの中心を持つ 10000 個のサンプルを生成します。

n_samples = 10000
random_state = 0
X, _ = make_blobs(n_samples=n_samples, centers=2, random_state=random_state)

クラスタ数とアルゴリズムの定義

このステップでは、KMeans と BisectingKMeans のクラスタ中心数を定義します。また、比較するアルゴリズムも定義します。

n_clusters_list = [4, 8, 16]
clustering_algorithms = {
    "Bisecting K-Means": BisectingKMeans,
    "K-Means": KMeans,
}

結果の可視化

このステップでは、サブプロットを使ってアルゴリズムの結果を可視化します。散布図を使ってデータポイントとクラスタ重心を表します。各アルゴリズムと比較するクラスタ数を反復処理して結果をプロットします。

fig, axs = plt.subplots(len(clustering_algorithms), len(n_clusters_list), figsize=(12, 5))
axs = axs.T

for i, (algorithm_name, Algorithm) in enumerate(clustering_algorithms.items()):
    for j, n_clusters in enumerate(n_clusters_list):
        algo = Algorithm(n_clusters=n_clusters, random_state=random_state, n_init=3)
        algo.fit(X)
        centers = algo.cluster_centers_

        axs[j, i].scatter(X[:, 0], X[:, 1], s=10, c=algo.labels_)
        axs[j, i].scatter(centers[:, 0], centers[:, 1], c="r", s=20)

        axs[j, i].set_title(f"{algorithm_name} : {n_clusters} clusters")

for ax in axs.flat:
    ax.label_outer()
    ax.set_xticks([])
    ax.set_yticks([])

plt.show()

まとめ

このチュートリアルでは、scikit-learn から生成されたサンプルデータを使って、通常の K-Means アルゴリズムと二分法 K-Means の性能を比較しました。散布図を使ってデータポイントとクラスタ重心を表すサブプロットを使って結果を可視化しました。二分法 K-Means アルゴリズムは、より規則的な大規模構造を持つクラスタを作成する傾向があるのに対し、通常の K-Means アルゴリズムは n_clusters を増やすときに異なるクラスタリングを作成することがわかりました。