Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Erläuterung des K-Means-Clustering-Modells in Python

Detaillierte Erläuterung des K-Means-Clustering-Modells in Python

王林
王林Original
2023-06-10 09:15:192012Durchsuche

Detaillierte Erklärung des K-Means-Clustering-Modells in Python

Die Clusteranalyse ist eine Methode zur Erkennung ähnlicher Objekte in Daten. In Bereichen wie Data Mining und maschinellem Lernen wird die Clusteranalyse häufig eingesetzt. K-Means-Clustering ist eine der gebräuchlichsten Clustering-Methoden. Es kann die Stichproben im Datensatz in k Cluster unterteilen, wobei die internen Unterschiede jedes Clusters am kleinsten und die Unterschiede zwischen den Clustern am größten sind. In diesem Artikel wird das k-means-Clustering-Modell in Python ausführlich vorgestellt.

  1. Prinzip des k-means-Clusterings

k-means-Clustering-Algorithmus ist eine iterative Clustering-Methode. Zu den Kernschritten gehören: Initialisieren des Massenschwerpunkts, Berechnen der Entfernung, Aktualisieren des Massenschwerpunkts, Bestimmen der Stoppbedingungen usw.

Zuerst müssen Sie die Anzahl der Cluster k angeben. Dann werden k Datenstichproben zufällig als anfängliche Schwerpunkte ausgewählt und für jede verbleibende Stichprobe wird sie dem Cluster mit dem nächstgelegenen Schwerpunkt zugewiesen. Als nächstes wird die Summe der quadrierten Abstände aller Datenpunkte in jedem Cluster vom Schwerpunkt des Clusters als Fehler des Clusters berechnet. Anschließend wird der Schwerpunkt jedes Clusters aktualisiert und in die Mitte aller Stichproben in diesem Cluster verschoben. Wiederholen Sie die obigen Schritte, bis der Fehler einen bestimmten Schwellenwert unterschreitet oder die Obergrenze der Anzahl der Iterationen erreicht ist.

  1. Python implementiert k-means-Clustering

In Python stellt die sklearn-Bibliothek die k-means-Clustering-Funktion bereit, die die einfachste Möglichkeit zur Verwendung des k-means-Clustering-Algorithmus darstellt. Im Folgenden wird der Iris-Datensatz als Beispiel verwendet, um zu zeigen, wie Python zum Implementieren von K-Means-Clustering verwendet wird Punkte repräsentieren jeweils unterschiedliche Cluster. Das schwarze „x“-Symbol stellt den Schwerpunkt jedes Clusters dar.

Wie man den optimalen k-Wert wählt

    Wie man den optimalen k-Wert bestimmt, ist eines der schwierigeren Probleme im K-Means-Clustering-Algorithmus. Im Folgenden werden zwei gängige Methoden vorgestellt: die Ellbogenmethode und die Konturkoeffizientenmethode.
  1. Elbow-Methode: Stellen Sie zunächst den k-Wert auf eine kleinere ganze Zahl ein und berechnen Sie die Summe der quadratischen Fehler (SSE) für jeden Cluster. Wenn der Wert von k zunimmt, nimmt die Summe der Fehlerquadrate ab. Wenn der k-Wert auf ein bestimmtes Niveau ansteigt, sinkt der SSE nicht mehr signifikant. Zu diesem Zeitpunkt wird die Beziehung zwischen dem k-Wert und dem SSE in einem Kurvendiagramm dargestellt, das ein Ellenbogenliniensegment darstellen muss. Das Liniensegment befindet sich hier an der „Ellenbogen“-Position und der entsprechende k-Wert ist die optimale Anzahl von Clustern .

Codebeispiel:

from sklearn.cluster import KMeans
from sklearn.datasets import load_iris

iris = load_iris()
X = iris.data[:, :2]  # 为了便于可视化,只取前两个特征
y = iris.target

kmeans = KMeans(n_clusters=3)  # 聚成3类
kmeans.fit(X)

centroids = kmeans.cluster_centers_  # 质心
labels = kmeans.labels_  # 样本分类

# 绘制图形
import matplotlib.pyplot as plt

colors = ['red', 'green', 'blue']
for i in range(len(X)):
    plt.scatter(X[i][0], X[i][1], c=colors[labels[i]])
    
for c in centroids:
    plt.scatter(c[0], c[1], marker='x', s=300, linewidths=3, color='black')
    
plt.show()

Konturkoeffizientenmethode: Der Silhouettekoeffizient kombiniert die beiden Faktoren Intra-Cluster-Irrelevanz und Inter-Cluster-Ähnlichkeit. Je größer der Wert des Silhouette-Koeffizienten ist, desto besser ist der Clustering-Effekt. Der Berechnungsprozess der Silhouette-Koeffizienten-Methode ist wie folgt:

Berechnen Sie für jede Stichprobe ihren durchschnittlichen Abstand von allen Stichproben im selben Cluster (genannt a) und berechnen Sie ihren durchschnittlichen Abstand von allen Stichproben in den nächstgelegenen anderen Clustern (genannt b). ).

Berechnen Sie den Silhouette-Koeffizienten s jeder Probe, $s = rac {b-a} {max(a, b)}$. Der Silhouettenkoeffizient des gesamten Modells ist der Durchschnitt der Silhouettenkoeffizienten aller Stichproben.

Codebeispiel:

sse = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters=i).fit(X)
    sse.append(kmeans.inertia_)  # ineria_属性表示模型的误差平方和
 
plt.plot(range(1, 11), sse)
plt.xlabel('K')
plt.ylabel('SSE')
plt.show()

K-bedeutet Clustering-Vorsichtsmaßnahmen

    k-bedeutet, dass Clustering die folgenden Vorsichtsmaßnahmen hat:
  1. Der Anfangswert hat einen größeren Einfluss auf das Ergebnis. Wenn der Anfangswert nicht gut ist, erhalten Sie möglicherweise schlechtere Ergebnisse. Schlechte Ergebnisse.

Die Clustering-Ergebnisse hängen von der ausgewählten Distanzmetrik ab, wie z. B. der euklidischen Distanz, der Manhattan-Distanz usw. Die Wahl sollte entsprechend der tatsächlichen Situation getroffen werden.

Ausreißer im Datensatz werden leicht zu den falschen Clustern gelockt, und die Entfernung von Ausreißern sollte in Betracht gezogen werden.

Wenn die Stichprobenklassenverteilung unausgeglichen ist, besteht ein häufiges Problem darin, Cluster mit extrem verzerrten Eigenschaften zu erhalten.

Zusammenfassung

    k-means-Clustering ist ein weit verbreiteter Clustering-Algorithmus. In Python kann die von der sklearn-Bibliothek bereitgestellte KMeans-Funktion zur schnellen Implementierung verwendet werden. Gleichzeitig kann auch die Ellbogenmethode oder die Silhouette-Koeffizienten-Methode verwendet werden, um die optimale Anzahl von Clustern zu ermitteln. Gleichzeitig sollte auf Themen wie die Auswahl des k-Werts und die Einstellung des anfänglichen Schwerpunkts in der Anwendung geachtet werden.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des K-Means-Clustering-Modells 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