K-Means-Clustering in Python: Schritt-für-Schritt-Beispiel – Statorials (2024)

Einer der gebräuchlichsten Clustering-Algorithmen beim maschinellen Lernen ist das sogenannte K-Means-Clustering .

K-Means-Clustering ist eine Technik, bei der wir jede Beobachtung aus einem Datensatz in einem von K Clustern platzieren.

Das Endziel besteht darin, K- Cluster zu haben, in denen die Beobachtungen innerhalb jedes Clusters einander ziemlich ähnlich sind, während sich die Beobachtungen in verschiedenen Clustern deutlich voneinander unterscheiden.

In der Praxis verwenden wir die folgenden Schritte, um K-Means-Clustering durchzuführen:

1. Wählen Sie einen Wert für K.

  • Zunächst müssen wir entscheiden, wie viele Cluster wir in den Daten identifizieren möchten. Oft müssen wir einfach mehrere verschiedene Werte für K testen und die Ergebnisse analysieren, um zu sehen, welche Anzahl von Clustern für ein bestimmtes Problem am sinnvollsten erscheint.

2. Ordnen Sie jede Beobachtung zufällig einem Anfangscluster von 1 bis K zu.

3. Führen Sie das folgende Verfahren aus, bis sich die Clusterzuweisungen nicht mehr ändern.

  • Berechnen Sie für jeden der K- Cluster den Schwerpunkt des Clusters. Dies ist einfach der Vektor der p- Mittelwert-Merkmale für die Beobachtungen des k-ten Clusters.
  • Ordnen Sie jede Beobachtung dem Cluster mit dem nächstgelegenen Schwerpunkt zu. Hier wird der Abstand mithilfe des euklidischen Abstands definiert.

Das folgende Schritt-für-Schritt-Beispiel zeigt, wie Sie K-Means-Clustering in Python mithilfe der KMeans- Funktion aus dem Sklearn- Modul durchführen.

Schritt 1: Importieren Sie die erforderlichen Module

Zuerst importieren wir alle Module, die wir zum Durchführen von K-Means-Clustering benötigen:

 import pandas as pdimport numpy as npimport matplotlib. pyplot as pltfrom sklearn. cluster import KMeansfrom sklearn. preprocessing import StandardScaler

Schritt 2: Erstellen Sie den DataFrame

Als Nächstes erstellen wir einen DataFrame, der die folgenden drei Variablen für 20 verschiedene Basketballspieler enthält:

  • Punkte
  • helfen
  • springt

Der folgende Code zeigt, wie dieser Pandas-DataFrame erstellt wird:

 #createDataFramedf = pd. DataFrame ({' points ': [18, np.nan, 19, 14, 14, 11, 20, 28, 30, 31, 35, 33, 29, 25, 25, 27, 29, 30, 19, 23], ' assists ': [3, 3, 4, 5, 4, 7, 8, 7, 6, 9, 12, 14, np.nan, 9, 4, 3, 4, 12, 15, 11], ' rebounds ': [15, 14, 14, 10, 8, 14, 13, 9, 5, 4, 11, 6, 5, 5, 3, 8, 12, 7, 6, 5]})#view first five rows of DataFrameprint ( df.head ()) points assists rebounds0 18.0 3.0 151 NaN 3.0 142 19.0 4.0 143 14.0 5.0 104 14.0 4.0 8

Wir werden K-Means-Clustering verwenden, um ähnliche Akteure basierend auf diesen drei Metriken zu gruppieren.

Schritt 3: Bereinigen und bereiten Sie den DataFrame vor

Dann führen wir die folgenden Schritte durch:

  • Verwenden Sie dropna() , um Zeilen mit NaN-Werten in einer beliebigen Spalte zu löschen
  • Verwenden Sie StandardScaler() , um jede Variable so zu skalieren, dass sie einen Mittelwert von 0 und eine Standardabweichung von 1 hat.

Der folgende Code zeigt, wie das geht:

 #drop rows with NA values in any columnsdf = df. dropna ()#create scaled DataFrame where each variable has mean of 0 and standard dev of 1scaled_df = StandardScaler(). fit_transform (df)#view first five rows of scaled DataFrameprint (scaled_df[:5])[[-0.86660275 -1.22683918 1.72722524] [-0.72081911 -0.96077767 1.45687694] [-1.44973731 -0.69471616 0.37548375] [-1.44973731 -0.96077767 -0.16521285] [-1.88708823 -0.16259314 1.45687694]]

Hinweis : Wir verwenden die Skalierung, damit jede Variable bei der Anpassung des k-means-Algorithmus die gleiche Bedeutung hat. Andernfalls hätten die Variablen mit den größten Spannweiten einen zu großen Einfluss.

Schritt 4: Finden Sie die optimale Anzahl an Clustern

Um K-Means-Clustering in Python durchzuführen, können wir die KMeans- Funktion aus dem Sklearn- Modul verwenden.

Diese Funktion verwendet die folgende grundlegende Syntax:

KMeans(init=’random‘, n_clusters=8, n_init=10, random_state=None)

Gold:

  • init : Steuert die Initialisierungstechnik.
  • n_clusters : die Anzahl der Cluster, in denen die Beobachtungen platziert werden sollen.
  • n_init : Die Anzahl der durchzuführenden Initialisierungen. Standardmäßig wird der k-means-Algorithmus zehnmal ausgeführt und derjenige mit dem niedrigsten SSE zurückgegeben.
  • random_state : Ein ganzzahliger Wert, den Sie auswählen können, um die Ergebnisse des Algorithmus reproduzierbar zu machen.

Das wichtigste Argument dieser Funktion ist n_clusters, das angibt, in wie vielen Clustern Beobachtungen platziert werden sollen.

Da wir jedoch nicht im Voraus wissen, wie viele Cluster optimal sind, müssen wir ein Diagramm erstellen, das die Anzahl der Cluster sowie die SSE (Summe der quadratischen Fehler) des Modells anzeigt.

Wenn wir diese Art von Diagramm erstellen, suchen wir normalerweise nach einem „Knie“, an dem die Summe der Quadrate beginnt, sich zu „biegen“ oder einzuebnen. Dies ist im Allgemeinen die optimale Anzahl von Clustern.

Der folgende Code zeigt, wie man diese Art von Diagramm erstellt, das die Anzahl der Cluster auf der x-Achse und den SSE auf der y-Achse anzeigt:

 #initialize kmeans parameterskmeans_kwargs = {" init ": " random "," n_init ": 10," random_state ": 1,}#create list to hold SSE values for each ksse = []for k in range(1, 11): kmeans = KMeans(n_clusters=k, ** kmeans_kwargs) kmeans. fit (scaled_df) sse. append (kmeans.inertia_)#visualize resultsplt. plot (range(1, 11), sse)plt. xticks (range(1, 11))plt. xlabel (" Number of Clusters ")plt. ylabel (“ SSE ”)plt. show () 

K-Means-Clustering in Python: Schritt-für-Schritt-Beispiel – Statorials (1)

In diesem Diagramm scheint es, dass es bei k = 3 Clustern einen Knick oder ein „Knie“ gibt.

Daher werden wir im nächsten Schritt 3 Cluster verwenden, wenn wir unser k-Means-Clustering-Modell anpassen.

Hinweis : In der realen Welt wird empfohlen, eine Kombination aus diesem Plot- und Domänenwissen zu verwenden, um die Anzahl der zu verwendenden Cluster auszuwählen.

Schritt 5: Führen Sie K-Means-Clustering mit optimalem K durch

Der folgende Code zeigt, wie man k-Means-Clustering für den Datensatz unter Verwendung des optimalen Werts für k von 3 durchführt:

 #instantiate the k-means class, using optimal number of clusterskmeans = KMeans(init=" random ", n_clusters= 3 , n_init= 10 , random_state= 1 )#fit k-means algorithm to datakmeans. fit (scaled_df)#view cluster assignments for each observationkmeans. labels_array([1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0]) 

Die resultierende Tabelle zeigt die Clusterzuweisungen für jede Beobachtung im DataFrame.

Um die Interpretation dieser Ergebnisse zu erleichtern, können wir dem DataFrame eine Spalte hinzufügen, die die Clusterzuweisung jedes Spielers anzeigt:

 #append cluster assingments to original DataFramedf[' cluster '] = kmeans. labels_#view updated DataFrameprint (df)points assists rebounds cluster0 18.0 3.0 15 12 19.0 4.0 14 13 14.0 5.0 10 14 14.0 4.0 8 15 11.0 7.0 14 16 20.0 8.0 13 17 28.0 7.0 9 28 30.0 6.0 5 29 31.0 9.0 4 010 35.0 12.0 11 011 33.0 14.0 6 013 25.0 9.0 5 014 25.0 4.0 3 215 27.0 3.0 8 216 29.0 4.0 12 217 30.0 12.0 7 018 19.0 15.0 6 019 23.0 11.0 5 0

Die Cluster- Spalte enthält eine Cluster-Nummer (0, 1 oder 2), der jeder Spieler zugewiesen wurde.

Spieler, die demselben Cluster angehören, haben ungefähr ähnliche Werte für die Spalten Punkte , Assists und Rebounds .

Hinweis : Die vollständige Dokumentation für die KMeans- Funktion von sklearn finden Sie hier .

Zusätzliche Ressourcen

Die folgenden Tutorials erklären, wie Sie andere häufige Aufgaben in Python ausführen:

So führen Sie eine lineare Regression in Python durch
So führen Sie eine logistische Regression in Python durch
So führen Sie eine K-Fold-Kreuzvalidierung in Python durch

K-Means-Clustering in Python: Schritt-für-Schritt-Beispiel – Statorials (2024)
Top Articles
Latest Posts
Article information

Author: Nicola Considine CPA

Last Updated:

Views: 5923

Rating: 4.9 / 5 (49 voted)

Reviews: 88% of readers found this page helpful

Author information

Name: Nicola Considine CPA

Birthday: 1993-02-26

Address: 3809 Clinton Inlet, East Aleisha, UT 46318-2392

Phone: +2681424145499

Job: Government Technician

Hobby: Calligraphy, Lego building, Worldbuilding, Shooting, Bird watching, Shopping, Cooking

Introduction: My name is Nicola Considine CPA, I am a determined, witty, powerful, brainy, open, smiling, proud person who loves writing and wants to share my knowledge and understanding with you.