Heim  >  Artikel  >  Backend-Entwicklung  >  Wie schreibe ich einen K-Means-Clustering-Algorithmus in Python?

Wie schreibe ich einen K-Means-Clustering-Algorithmus in Python?

WBOY
WBOYOriginal
2023-09-21 11:06:25903Durchsuche

Wie schreibe ich einen K-Means-Clustering-Algorithmus in Python?

Wie schreibe ich einen K-Means-Clustering-Algorithmus in Python?

Der K-Means-Clustering-Algorithmus ist ein häufig verwendeter Data-Mining- und Machine-Learning-Algorithmus, der einen Datensatz anhand seiner Attribute klassifizieren und gruppieren kann. In diesem Artikel wird erläutert, wie der K-Means-Clustering-Algorithmus in Python geschrieben wird, und es werden spezifische Codebeispiele bereitgestellt.

Bevor wir mit dem Schreiben von Code beginnen, müssen wir die Grundprinzipien des K-Means-Clustering-Algorithmus verstehen.

Die grundlegenden Schritte des K-Means-Clustering-Algorithmus sind wie folgt:

  1. K Schwerpunkte initialisieren. Der Schwerpunkt bezieht sich auf den Mittelpunkt des Clusters, und jeder Datenpunkt wird der Kategorie zugeordnet, die durch seinen nächstgelegenen Schwerpunkt dargestellt wird.
  2. Weisen Sie jeden Datenpunkt basierend auf seiner Entfernung vom Schwerpunkt der Kategorie zu, die durch den nächstgelegenen Schwerpunkt dargestellt wird.
  3. Aktualisieren Sie die Position des Schwerpunkts und setzen Sie ihn auf den Durchschnitt aller Datenpunkte in dieser Kategorie.
  4. Wiederholen Sie die Schritte 2 und 3, bis sich die Lage des Massenschwerpunkts nicht mehr ändert.

Jetzt können wir mit dem Schreiben von Code beginnen.

Importieren Sie die erforderlichen Bibliotheken

Zuerst müssen wir die erforderlichen Bibliotheken wie Numpy und Matplotlib importieren.

import numpy as np
import matplotlib.pyplot as plt

Datenvorbereitung

Wir müssen einen Datensatz für das Clustering vorbereiten. Hier verwenden wir Numpy, um zufällig einen Satz zweidimensionaler Daten zu generieren.

data = np.random.randn(100, 2)

Schwerpunkte initialisieren

Wir müssen k Schwerpunkte für den Clustering-Algorithmus initialisieren. Hier verwenden wir Numpy, um k Datenpunkte zufällig als anfängliche Schwerpunkte auszuwählen.

k = 3
centroids = data[np.random.choice(range(len(data)), k, replace=False)]

Abstand berechnen

Wir müssen eine Funktion definieren, um den Abstand zwischen dem Datenpunkt und dem Massenschwerpunkt zu berechnen. Hier verwenden wir den euklidischen Abstand.

def compute_distances(data, centroids):
    return np.linalg.norm(data[:, np.newaxis] - centroids, axis=2)

Weisen Sie Datenpunkte dem nächstgelegenen Schwerpunkt zu.

Wir müssen eine Funktion definieren, um jeden Datenpunkt der Kategorie zuzuordnen, die durch den nächstgelegenen Schwerpunkt dargestellt wird.

def assign_clusters(data, centroids):
    distances = compute_distances(data, centroids)
    return np.argmin(distances, axis=1)

Aktualisieren Sie die Position des Schwerpunkts

Wir müssen eine Funktion definieren, um die Position des Schwerpunkts zu aktualisieren, d. h. ihn auf den Durchschnitt aller Datenpunkte in dieser Kategorie zu setzen.

def update_centroids(data, clusters, k):
    centroids = []
    for i in range(k):
        centroids.append(np.mean(data[clusters == i], axis=0))
    return np.array(centroids)

Iterativer Clustering-Prozess

Abschließend müssen wir den Clustering-Prozess wiederholen, bis sich die Position des Schwerpunkts nicht mehr ändert.

def kmeans(data, k, max_iter=100):
    centroids = data[np.random.choice(range(len(data)), k, replace=False)]
    for _ in range(max_iter):
        clusters = assign_clusters(data, centroids)
        new_centroids = update_centroids(data, clusters, k)
        if np.all(centroids == new_centroids):
            break
        centroids = new_centroids
    return clusters, centroids

Führen Sie den Clustering-Algorithmus aus

Jetzt können wir den Clustering-Algorithmus ausführen, um die Kategorie, zu der jeder Datenpunkt gehört, und den endgültigen Schwerpunkt zu ermitteln.

clusters, centroids = kmeans(data, k)

Visualisierung der Ergebnisse

Schließlich können wir matplotlib verwenden, um die Ergebnisse zu visualisieren. Jeder Datenpunkt ist entsprechend der Kategorie, zu der er gehört, farblich gekennzeichnet, und die Position des Schwerpunkts wird durch einen roten Kreis angezeigt.

plt.scatter(data[:, 0], data[:, 1], c=clusters)
plt.scatter(centroids[:, 0], centroids[:, 1], s=100, c='red', marker='o')
plt.show()

Durch das obige Codebeispiel können wir den K-Means-Clustering-Algorithmus in Python implementieren. Sie können die Anzahl der Cluster k und andere Parameter entsprechend Ihren Anforderungen anpassen. Ich hoffe, dieser Artikel hilft Ihnen, den K-Means-Clustering-Algorithmus zu verstehen und zu implementieren!

Das obige ist der detaillierte Inhalt vonWie schreibe ich einen K-Means-Clustering-Algorithmus in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn