Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Verwendung von Clustering auf Echten Daten | Grundlegende Clustering-Algorithmen
Clusteranalyse
course content

Kursinhalt

Clusteranalyse

Clusteranalyse

1. Was Ist Clustering?
2. Grundlegende Clustering-Algorithmen
3. Wie Wählt Man das Beste Modell Aus?

book
Verwendung von Clustering auf Echten Daten

Wir haben 4 Clustering-Algorithmen betrachtet und die Prinzipien ihrer Arbeit an einfachen Datensätzen untersucht. Jetzt versuchen wir, diese Clustering-Methoden zur Lösung eines realen Problems mit echten Daten zu verwenden.

Wir werden den Iris-Datensatz verwenden, der aus 50 Proben von jeweils drei Iris-Arten besteht (Iris setosa, Iris virginica und Iris versicolor); von jeder Probe wurden vier Merkmale gemessen: die Länge und die Breite der Kelchblätter und Blütenblätter, in Zentimetern. Die Aufgabe besteht darin, den Typ der Iris anhand dieser Merkmale zu bestimmen: Wir werden Clustering bereitstellen und annehmen, dass jeder Cluster eine der Iris-Arten repräsentiert.

Um verständliche Visualisierungen bereitzustellen, verwenden wir nur zwei Merkmale für das Clustering: die Länge der Kelchblätter und die Länge der Blütenblätter. Schauen wir uns unsere Daten an:

1234567891011
from sklearn.datasets import load_iris import numpy as np import matplotlib.pyplot as plt X_iris, y_iris = load_iris(return_X_y=True) X_iris = X_iris[:, [0,2]] plt.scatter(X_iris[:, 0], X_iris[:, 1], c=y_iris, cmap='tab20b') plt.title('Iris data') plt.xlabel('Length of sepals') plt.ylabel('Length of petals') plt.show()
copy

Verwenden wir K-means, um Clustering bereitzustellen und die Ergebnisse mit echten Daten zu vergleichen:

123456789101112131415161718192021
from sklearn.datasets import load_iris from sklearn.cluster import KMeans import numpy as np import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') X_iris, y_iris = load_iris(return_X_y=True) X_iris = X_iris[:, [0,2]] kmeans = KMeans(n_clusters=3).fit(X_iris) fig, axes = plt.subplots(1, 2) fig.set_size_inches(10, 5) axes[0].scatter(X_iris[:, 0], X_iris[:, 1], c=y_iris, cmap='tab20b') axes[0].set_title('Real clusters') axes[1].scatter(X_iris[:, 0], X_iris[:, 1], c = kmeans.labels_, cmap='tab20b') axes[1].set_title('Clusters with K-means') plt.setp(axes[0], xlabel='Length of sepals') plt.setp(axes[0], ylabel='Length of petals') plt.setp(axes[1], xlabel='Length of sepals') plt.setp(axes[1], ylabel='Length of petals')
copy

Versuchen wir nun den agglomerativen Algorithmus:

1234567891011121314151617
from sklearn.datasets import load_iris from sklearn.cluster import AgglomerativeClustering import numpy as np import matplotlib.pyplot as plt X_iris, y_iris = load_iris(return_X_y=True) X_iris = X_iris[:, [0,2]] agglomerative = AgglomerativeClustering(n_clusters = 3).fit(X_iris) fig, axes = plt.subplots(1, 2) fig.set_size_inches(10, 5) axes[0].scatter(X_iris[:, 0], X_iris[:, 1], c=y_iris, cmap='tab20b') axes[0].set_title('Real clusters') axes[1].scatter(X_iris[:, 0], X_iris[:, 1], c = agglomerative.labels_, cmap='tab20b') axes[1].set_title('Clusters with Agglomerative') plt.setp(axes[0], xlabel='Length of sepals') plt.setp(axes[0], ylabel='Length of petals') plt.setp(axes[1], xlabel='Length of sepals') plt.setp(axes[1], ylabel='Length of petals')
copy

Hinweis

Wir haben im Kapitel über Agglomerative Clustering erwähnt, dass wir die Anzahl der Cluster manuell definieren können. Hier haben wir diese Fähigkeit genutzt, da wir Informationen über die Anzahl der Zielcluster haben (3 Iris-Arten = 3 Cluster).

Verwendung des Mean Shift Clustering-Algorithmus:

1234567891011121314151617
from sklearn.datasets import load_iris from sklearn.cluster import MeanShift import numpy as np import matplotlib.pyplot as plt X_iris, y_iris = load_iris(return_X_y=True) X_iris = X_iris[:, [0,2]] mean_shift= MeanShift(bandwidth=2).fit(X_iris) fig, axes = plt.subplots(1, 2) fig.set_size_inches(10, 5) axes[0].scatter(X_iris[:, 0], X_iris[:, 1], c=y_iris, cmap='tab20b') axes[0].set_title('Real clusters') axes[1].scatter(X_iris[:, 0], X_iris[:, 1], c = mean_shift.labels_, cmap='tab20b') axes[1].set_title('Clusters with Mean shift') plt.setp(axes[0], xlabel='Length of sepals') plt.setp(axes[0], ylabel='Length of petals') plt.setp(axes[1], xlabel='Length of sepals') plt.setp(axes[1], ylabel='Length of petals')
copy

Schließlich versuchen wir, DBSCAN zu verwenden:

1234567891011121314151617
from sklearn.datasets import load_iris from sklearn.cluster import DBSCAN import numpy as np import matplotlib.pyplot as plt X_iris, y_iris = load_iris(return_X_y=True) X_iris = X_iris[:, [0,2]] dbscan = DBSCAN(eps=1, min_samples=10).fit(X_iris) fig, axes = plt.subplots(1, 2) fig.set_size_inches(10, 5) axes[0].scatter(X_iris[:, 0], X_iris[:, 1], c=y_iris, cmap='tab20b') axes[0].set_title('Real clusters') axes[1].scatter(X_iris[:, 0], X_iris[:, 1], c = dbscan.labels_, cmap='tab20b') axes[1].set_title('Clusters with DBSCAN') plt.setp(axes[0], xlabel='Length of sepals') plt.setp(axes[0], ylabel='Length of petals') plt.setp(axes[1], xlabel='Length of sepals') plt.setp(axes[1], ylabel='Length of petals')
copy

Hinweis

Im obigen Code haben wir die Parameter für die Algorithmen manuell definiert (eps, min_samples für DBSCAN und bandwidth für Mean Shift). Bei realen Aufgaben ist es notwendig, zusätzliche Techniken (Cross-Validation, Grid Search usw.) zu verwenden, um optimale Werte dieser Parameter zu bestimmen.

Wir können sehen, dass K-means und Agglomerative Algorithmen die Aufgabe aufgrund der Visualisierungen lösen können. Gleichzeitig können Mean Shift und DBSCAN keine 3 verschiedenen Cluster extrahieren.

Daher können wir schließen, dass für jede einzelne Aufgabe ein individueller Ansatz erforderlich ist: die Wahl eines Algorithmus, die Auswahl der Parameter usw. Darüber hinaus ist es notwendig, bestimmte Metriken festzulegen, mit denen wir die Qualität der Clusterbildung bewerten können. Die Verwendung von Cluster-Plots ist aus zwei Gründen nicht der beste Indikator:

  1. Plots können die Verteilung in Cluster für multivariate Daten (Daten mit mehr als 3 Merkmalen können nicht richtig visualisiert werden) nicht angemessen zeigen;
  2. Plots können Algorithmen zeigen, die sehr schlechte Ergebnisse liefern (wie DBSCAN und Mean Shift im obigen Beispiel). Aber wenn die Ergebnisse gut sind, ist es sehr schwierig zu verstehen, wo die Clusterqualität besser ist (wie K-means und Agglomerative im obigen Beispiel).

Wir werden im nächsten Abschnitt über die Bewertung der Qualität der Clusterbildung sprechen.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 8
We're sorry to hear that something went wrong. What happened?
some-alt