Plot Agglomerative Clustering

Machine LearningMachine LearningBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Agglomeratives Clustering ist ein hierarchisches Clustering-Algorithmus, der ähnliche Datenpunkte zusammen gruppiert. Es beginnt mit jedem Datenpunkt als separatem Cluster und kombiniert diese Cluster iterativ basierend auf ihrer Ähnlichkeit, bis alle Datenpunkte zu einem einzelnen Cluster gehören. In diesem Lab werden wir die Auswirkungen untersuchen, die die Einführung eines Verbindungsgraphen hat, um die lokale Struktur in den Daten zu erfassen.

VM-Tipps

Nachdem die VM gestartet 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 von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/neighbors("Nearest Neighbors") sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/cluster("Clustering") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/neighbors -.-> lab-49062{{"Plot Agglomerative Clustering"}} sklearn/cluster -.-> lab-49062{{"Plot Agglomerative Clustering"}} ml/sklearn -.-> lab-49062{{"Plot Agglomerative Clustering"}} end

Importieren der erforderlichen Bibliotheken

Wir beginnen mit dem Importieren der erforderlichen Bibliotheken, einschließlich numpy, matplotlib und sklearn.

import time
import matplotlib.pyplot as plt
import numpy as np

from sklearn.cluster import AgglomerativeClustering
from sklearn.neighbors import kneighbors_graph

Erzeugen von Beispiel-Daten

Wir erzeugen Beispiel-Daten, indem wir eine Sinuswelle mit zufälligem Rauschen erzeugen.

n_samples = 1500
np.random.seed(0)
t = 1.5 * np.pi * (1 + 3 * np.random.rand(1, n_samples))
x = t * np.cos(t)
y = t * np.sin(t)

X = np.concatenate((x, y))
X += 0.7 * np.random.randn(2, n_samples)
X = X.T

Erstellen eines Graphen

Erstellen Sie einen Graphen, der die lokale Konnektivität erfasst. Ein größerer Anzahl von Nachbarn liefert homogenere Cluster, allerdings auf Kosten der Rechenzeit. Eine sehr große Anzahl von Nachbarn liefert Clustergrößen, die gleichmäßiger verteilt sind, kann jedoch die lokale Mannigfaltigkeitsstruktur der Daten nicht erzwingen.

knn_graph = kneighbors_graph(X, 30, include_self=False)

Visualisierung des Clustering ohne Konnektivität

Visualisieren Sie das Clustering ohne Konnektivität, indem Sie die Datenpunkte mit unterschiedlichen Farben darstellen.

for n_clusters in (30, 3):
    plt.figure(figsize=(10, 4))
    for index, linkage in enumerate(("average", "complete", "ward", "single")):
        plt.subplot(1, 4, index + 1)
        model = AgglomerativeClustering(
            linkage=linkage, connectivity=None, n_clusters=n_clusters
        )
        t0 = time.time()
        model.fit(X)
        elapsed_time = time.time() - t0
        plt.scatter(X[:, 0], X[:, 1], c=model.labels_, cmap=plt.cm.nipy_spectral)
        plt.title(
            "linkage=%s\n(time %.2fs)" % (linkage, elapsed_time),
            fontdict=dict(verticalalignment="top"),
        )
        plt.axis("equal")
        plt.axis("off")

        plt.subplots_adjust(bottom=0, top=0.83, wspace=0, left=0, right=1)
        plt.suptitle(
            "n_cluster=%i, connectivity=%r"
            % (n_clusters, False),
            size=17,
        )

plt.show()

Visualisierung des Clustering mit Konnektivität

Visualisieren Sie das Clustering mit Konnektivität, indem Sie die Datenpunkte mit unterschiedlichen Farben darstellen.

for n_clusters in (30, 3):
    plt.figure(figsize=(10, 4))
    for index, linkage in enumerate(("average", "complete", "ward", "single")):
        plt.subplot(1, 4, index + 1)
        model = AgglomerativeClustering(
            linkage=linkage, connectivity=knn_graph, n_clusters=n_clusters
        )
        t0 = time.time()
        model.fit(X)
        elapsed_time = time.time() - t0
        plt.scatter(X[:, 0], X[:, 1], c=model.labels_, cmap=plt.cm.nipy_spectral)
        plt.title(
            "linkage=%s\n(time %.2fs)" % (linkage, elapsed_time),
            fontdict=dict(verticalalignment="top"),
        )
        plt.axis("equal")
        plt.axis("off")

        plt.subplots_adjust(bottom=0, top=0.83, wspace=0, left=0, right=1)
        plt.suptitle(
            "n_cluster=%i, connectivity=%r"
            % (n_clusters, True),
            size=17,
        )

plt.show()

Zusammenfassung

In diesem Lab haben wir den Effekt untersucht, dass ein Konnektivitätsgraphen auf die Daten ausübt, um die lokale Struktur mithilfe von Agglomerative Clustering zu erfassen. Wir haben das Clustering mit und ohne Konnektivität visualisiert und festgestellt, dass die Verwendung eines Konnektivitätsgraphen zu stabileren und sinnvolleren Clustern führen kann. Wir haben auch beobachtet, dass eine größere Anzahl von Nachbarn zu homogeneren Clustern führt, allerdings auf Kosten der Rechenzeit.