Kursinhalt
Clusteranalyse
Clusteranalyse
K-Means Clustering
K-means Clustering ist der beliebteste Clustering-Algorithmus, der verwendet wird, um ähnliche Datenpunkte in einem Datensatz zu gruppieren. Der Algorithmus funktioniert, indem zunächst ein Wert k ausgewählt wird, der die Anzahl der Cluster oder Gruppen darstellt, die wir in den Daten identifizieren möchten.
Lassen Sie uns kurz alle Phasen des Betriebs dieses Algorithmus beschreiben:
Schritt 1. Der Algorithmus initialisiert k zufällige Punkte im Datensatz, die als Zentroiden bezeichnet werden;
Schritt 2. Jeder Datenpunkt wird dann dem nächstgelegenen Schwerpunkt basierend auf einer Distanzmetrik, wie der euklidischen Distanz, zugewiesen. Dieser Prozess erstellt k Cluster, wobei jedes Cluster aus den Datenpunkten besteht, die dem Schwerpunkt am nächsten sind;
Schritt 3. Die Schwerpunkte werden in die Mitte jedes Clusters verschoben;
Schritt 4. Schritte 2 und 3 werden wiederholt. Der Algorithmus aktualisiert iterativ die Zentroiden und ordnet die Datenpunkte neu zu, bis er konvergiert, wenn sich die Zentroiden nicht mehr bewegen.
Wir können sehen, dass dieser Algorithmus ziemlich einfach und intuitiv ist, aber er hat einige gravierende Nachteile:
- Wir müssen die Anzahl der Cluster manuell wählen;
- Der Algorithmus hängt von den anfänglichen Zentroidwerten ab;
- Der Algorithmus ist stark von Ausreißern beeinflusst.
Schauen wir uns die Implementierung von K-means in Python an:
from sklearn.cluster import KMeans import numpy as np import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # Create toy dataset to show K-means clustering model X = np.array([[1, 3], [2, 1], [1, 5], [8, 4], [11, 3], [15, 0], [6,1], [10,3], [3,7], [4,5], [12,7]]) # Fit K-means model for 2 clusters kmeans = KMeans(n_clusters=2).fit(X) # Print labels for train data print('Train labels are: ', kmeans.labels_) # Print coordinates of cluster centers print('Cluster centers are: ', kmeans.cluster_centers_) # Visualize the results of clustering fig, axes = plt.subplots(1, 2) axes[0].scatter(X[:, 0], X[:, 1], c=kmeans.labels_, s=50, cmap='tab20b') axes[0].scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], c='red', s=100) axes[0].set_title('Train data points') # Provide predictions for new data predicted_labels = kmeans.predict([[10, 5], [4, 2], [3, 3], [6, 3]]) print('Predicted labels are: ', predicted_labels) # Visualize prediction results axes[1].scatter([10, 4, 3, 6], [5, 2, 3, 3], c=predicted_labels, s=50, cmap='tab20b') axes[1].scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], c='red', s=100) axes[1].set_title('Test data points')
Im obigen Code haben wir Folgendes verwendet:
Kmeans
-Klasse aussklearn. cluster
. Dern_clusters
-Parameter bestimmt die Anzahl der Cluster in den Daten;.fit(X)
-Methode derKmeans
-Klasse passt unser Modell an - bestimmt Cluster und deren Zentren gemäß den Daten X;.labels_
-Attribut derKMeans
-Klasse speichert die Cluster-Nummern für jede Probe der Trainingsdaten (0 Cluster, 1 Cluster, 2 Cluster,...);.cluster_centers_
-Attribut derKMeans
-Klasse speichert die vom Algorithmus angepassten Cluster-Zentren-Koordinaten;.predict()
-Methode derKmeans
-Klasse wird verwendet, um die Labels neuer Punkte vorherzusagen.
Danke für Ihr Feedback!