K-Means Clustering mit der Elbow-Methode PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

K-Means-Clustering mit der Elbow-Methode

K-Means-Clustering ist ein unbeaufsichtigter Lernalgorithmus, der Daten basierend auf der euklidischen Entfernung jedes Punktes zu einem zentralen Punkt gruppiert, der als bezeichnet wird Schwerpunkt. Die Schwerpunkte werden durch alle Punkte definiert, die sich im selben Cluster befinden. Der Algorithmus wählt zuerst zufällige Punkte als Schwerpunkte aus und iteriert dann, indem er sie bis zur vollständigen Konvergenz anpasst.

Eine wichtige Sache, die Sie bei der Verwendung von K-Means beachten sollten, ist, dass die Anzahl der Cluster ein Hyperparameter ist, der vor dem Ausführen des Modells definiert wird.

K-means kann mit Scikit-Learn mit nur 3 Codezeilen implementiert werden. Scikit-learn hat auch bereits eine Zentroid-Optimierungsmethode verfügbar, km bedeutet ++, wodurch das Modell schneller konvergiert.

Um den K-Means-Clustering-Algorithmus anzuwenden, laden wir die Palmer-Pinguine Datensatz, wählen Sie die Spalten aus, die geclustert werden sollen, und verwenden Sie Seaborn, um ein Streudiagramm mit farbcodierten Clustern zu zeichnen.

Note: Hier können Sie den Datensatz herunterladen Link.

Lassen Sie uns die Bibliotheken importieren und das Penguins-Dataset laden, es auf die ausgewählten Spalten zuschneiden und Zeilen mit fehlenden Daten löschen (es gab nur 2):

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

df = pd.read_csv('penguins.csv')
print(df.shape) 
df = df[['bill_length_mm', 'flipper_length_mm']]
df = df.dropna(axis=0)

Wir können die Elbow-Methode verwenden, um einen Hinweis auf Cluster für unsere Daten zu erhalten. Es besteht in der Interpretation eines Liniendiagramms mit einer Ellbogenform. Die Anzahl der Cluster entspricht den Ellbogenbeugen. Die x-Achse des Diagramms ist die Anzahl der Cluster und die y-Achse ist die Within Clusters Sum of Squares (WCSS) für jede Anzahl von Clustern:

wcss = []

for i in range(1, 11):
    clustering = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering.fit(df)
    wcss.append(clustering.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss);

Die Ellbogenmethode zeigt an, dass unsere Daten 2 Cluster haben. Lassen Sie uns die Daten vor und nach dem Clustering darstellen:

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without clustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('Using the elbow method');

K-Means Clustering mit der Elbow-Methode PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Dieses Beispiel zeigt, dass die Elbow-Methode nur eine Referenz ist, wenn sie zur Auswahl der Clusteranzahl verwendet wird. Wir wissen bereits, dass wir 3 Arten von Pinguinen im Datensatz haben, aber wenn wir ihre Anzahl mit der Elbow-Methode bestimmen würden, wären 2 Cluster unser Ergebnis.

Da K-Means empfindlich auf Datenabweichungen reagiert, schauen wir uns die deskriptiven Statistiken der Spalten an, die wir gruppieren:

df.describe().T 

Das führt zu:

 					count 	mean 		std 		min 	25% 	50% 	75% 	max
bill_length_mm 		342.0 	43.921930 	5.459584 	32.1 	39.225 	44.45 	48.5 	59.6
flipper_length_mm 	342.0 	200.915205 	14.061714 	172.0 	190.000 197.00 	213.0 	231.0

Beachten Sie, dass der Mittelwert weit von der Standardabweichung (std) entfernt ist, was auf eine hohe Varianz hinweist. Versuchen wir, es zu reduzieren, indem wir die Daten mit Standard Scaler skalieren:

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
scaled = ss.fit_transform(df)

Lassen Sie uns nun den Elbow-Methodenprozess für die skalierten Daten wiederholen:

wcss_sc = []

for i in range(1, 11):
    clustering_sc = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering_sc.fit(scaled)
    wcss_sc.append(clustering_sc.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss_sc);

K-Means Clustering mit der Elbow-Methode PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Sehen Sie sich unseren praxisnahen, praktischen Leitfaden zum Erlernen von Git an, mit Best Practices, branchenweit akzeptierten Standards und einem mitgelieferten Spickzettel. Hören Sie auf, Git-Befehle zu googeln und tatsächlich in Verbindung, um es!

Diesmal ist die vorgeschlagene Anzahl von Clustern 3. Wir können die Daten mit den Cluster-Beschriftungen erneut zusammen mit den beiden vorherigen Diagrammen zum Vergleich darstellen:

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without cliustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('With the Elbow method')
sns.scatterplot(ax=axes[2], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering_sc.labels_).set_title('With the Elbow method and scaled data');

K-Means Clustering mit der Elbow-Methode PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Wenn Sie K-Means-Clustering verwenden, müssen Sie die Anzahl der Cluster im Voraus bestimmen. Wie wir bei der Verwendung einer Methode zur Auswahl unserer gesehen haben k Anzahl der Cluster, das Ergebnis ist nur ein Vorschlag und kann durch die Menge der Datenvarianz beeinflusst werden. Es ist wichtig, beim Clustering eine gründliche Analyse durchzuführen und mehr als ein Modell mit unterschiedlichen _k_s zu generieren.

Wenn es keinen vorherigen Hinweis darauf gibt, wie viele Cluster in den Daten enthalten sind, visualisieren Sie sie, testen Sie sie und interpretieren Sie sie, um zu sehen, ob die Clustering-Ergebnisse sinnvoll sind. Wenn nicht, Clustern Sie erneut. Sehen Sie sich auch mehr als eine Metrik an und instanziieren Sie verschiedene Clustering-Modelle – für K-Mittelwerte sehen Sie sich den Silhouettenwert und vielleicht das hierarchische Clustering an, um zu sehen, ob die Ergebnisse gleich bleiben.

Zeitstempel:

Mehr von Stapelmissbrauch