Vergleich der Leistung von Bisecting K-Means und regulärem K-Means

Beginner

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

Einführung

Dies ist ein Schritt-für-Schritt-Tutorial, um die Leistung des regulären K-Means-Algorithmus und des Bisecting K-Means zu vergleichen. Das Tutorial wird die Unterschiede zwischen diesen Algorithmen bei der Clustering mit zunehmender Anzahl von Clustern (n_clusters) demonstrieren.

Tipps für die virtuelle Maschine (VM)

Nachdem der Start der VM abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen von Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Bibliotheken importieren

In diesem Schritt werden wir die erforderlichen Bibliotheken für dieses Tutorial importieren.

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

Beispiel-Daten generieren

In diesem Schritt werden wir Beispiel-Daten mit der Funktion make_blobs() aus scikit-learn generieren. Wir werden 10000 Proben mit 2 Zentren generieren.

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

Anzahl der Cluster und Algorithmen definieren

In diesem Schritt werden wir die Anzahl der Clusterzentren für KMeans und BisectingKMeans definieren. Wir werden auch die Algorithmen definieren, die verglichen werden sollen.

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

Ergebnisse visualisieren

In diesem Schritt werden wir die Ergebnisse der Algorithmen mit Hilfe von Teilplots visualisieren. Wir werden den Scatterplot verwenden, um die Datenpunkte und die Clusterzentren darzustellen. Wir werden durch jeden Algorithmus und die Anzahl der zu vergleichenden Cluster iterieren und die Ergebnisse plotten.

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()

Zusammenfassung

In diesem Tutorial wurde die Leistung des regulären K-Means-Algorithmus und des Bisecting K-Means-Algorithmus mit Hilfe von Beispiel-Daten aus scikit-learn verglichen. Wir haben die Ergebnisse mithilfe von Teilplots visualisiert, wobei Scatterplots die Datenpunkte und die Clusterzentren repräsentieren. Wir haben festgestellt, dass der Bisecting K-Means-Algorithmus dazu tendiert, Cluster zu erstellen, die eine regelmäßige großskalige Struktur aufweisen, während der reguläre K-Means-Algorithmus unterschiedliche Clusterungen erzeugt, wenn die Anzahl der Cluster (n_clusters) erhöht wird.