KMeans#
- class sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init='auto', max_iter=300, tol=0.0001, verbose=0, random_state=None, copy_x=True, algorithm='lloyd')[Quelle]#
K-Means-Clustering.
Lesen Sie mehr im Benutzerhandbuch.
- Parameter:
- n_clustersint, default=8
Die Anzahl der zu bildenden Cluster sowie die Anzahl der zu generierenden Zentren.
Ein Beispiel, wie Sie einen optimalen Wert für
n_clusterswählen, finden Sie unter Auswahl der Anzahl der Cluster mit Silhouette-Analyse bei KMeans-Clustering.- init{‘k-means++’, ‘random’}, callable oder array-like von Form (n_clusters, n_features), default=’k-means++’
Methode zur Initialisierung
‘k-means++’ : Wählt initiale Cluster-Zentren unter Verwendung einer Stichprobe, die auf einer empirischen Wahrscheinlichkeitsverteilung des Beitrags der Punkte zur Gesamtträgheit basiert. Diese Technik beschleunigt die Konvergenz. Der implementierte Algorithmus ist „greedy k-means++“. Er unterscheidet sich vom Vanilla k-means++ dadurch, dass er bei jedem Stichprobenschritt mehrere Versuche durchführt und den besten Zentroiden unter ihnen auswählt.
„random“: wählt
n_clustersBeobachtungen (Zeilen) zufällig aus den Daten als anfängliche Zentren aus.Wenn ein Array übergeben wird, sollte es die Form (n_clusters, n_features) haben und die anfänglichen Zentren angeben.
Wenn ein Callable übergeben wird, sollte es die Argumente X, n_clusters und einen Zufallszustand empfangen und eine Initialisierung zurückgeben.
Ein Beispiel für die Verwendung der verschiedenen
init-Strategien finden Sie unter Eine Demonstration von K-Means-Clustering auf den handschriftlichen Ziffern-Daten.Eine Bewertung des Einflusses der Initialisierung finden Sie im Beispiel Empirische Bewertung des Einflusses der k-means-Initialisierung.
- n_init‘auto’ oder int, Standard=’auto’
Anzahl der Male, mit denen der k-means-Algorithmus mit unterschiedlichen Zentroiden-Seeds ausgeführt wird. Das Endergebnis ist die beste Ausgabe von
n_initaufeinanderfolgenden Läufen in Bezug auf die Trägheit. Mehrere Läufe werden für spärliche hochdimensionale Probleme empfohlen (siehe Clustering spärlicher Daten mit k-means).Wenn
n_init='auto'ist, hängt die Anzahl der Läufe vom Wert von init ab: 10 bei Verwendung voninit='random'oderinitist eine aufrufbare Funktion; 1 bei Verwendung voninit='k-means++'oderinitist ein Array-ähnliches Objekt.Hinzugefügt in Version 1.2: Option 'auto' für
n_inithinzugefügt.Geändert in Version 1.4: Standardwert für
n_initgeändert zu'auto'.- max_iterint, Standard=300
Maximale Anzahl von Iterationen des k-means-Algorithmus für einen einzelnen Durchlauf.
- tolfloat, Standard=1e-4
Relative Toleranz in Bezug auf die Frobenius-Norm der Differenz der Cluster-Zentren zweier aufeinanderfolgender Iterationen, um Konvergenz zu deklarieren.
- verboseint, default=0
Ausführlichkeitsmodus.
- random_stateint, RandomState-Instanz oder None, default=None
Bestimmt die Zufallszahlengenerierung für die Zentroiden-Initialisierung. Verwenden Sie eine ganze Zahl, um die Zufälligkeit deterministisch zu machen. Siehe Glossar.
- copy_xbool, Standard=True
Bei der Vorab-Berechnung von Distanzen ist es numerisch genauer, die Daten zuerst zu zentrieren. Wenn copy_x True ist (Standard), werden die Originaldaten nicht verändert. Wenn False, werden die Originaldaten verändert und vor der Rückgabe der Funktion wiederhergestellt, aber es können kleine numerische Unterschiede durch Subtraktion und anschließendes Hinzufügen des Datenmittelwerts entstehen. Beachten Sie, dass, wenn die Originaldaten nicht C-kontinuierlich sind, auch dann eine Kopie erstellt wird, wenn copy_x False ist. Wenn die Originaldaten spärlich, aber nicht im CSR-Format sind, wird auch dann eine Kopie erstellt, wenn copy_x False ist.
- algorithm{“lloyd”, “elkan”}, Standard=”lloyd”
Zu verwendender K-Means-Algorithmus. Der klassische EM-ähnliche Algorithmus ist
"lloyd". Die"elkan"-Variante kann bei einigen Datensätzen mit gut definierten Clustern effizienter sein, indem sie die Dreiecksungleichung verwendet. Sie ist jedoch aufgrund der Allokation eines zusätzlichen Arrays der Form(n_samples, n_clusters)speicherintensiver.Geändert in Version 0.18: Elkan-Algorithmus hinzugefügt
Geändert in Version 1.1: "full" wurde in "lloyd" umbenannt und "auto" und "full" wurden als veraltet markiert. "auto" wurde so geändert, dass es "lloyd" anstelle von "elkan" verwendet.
- Attribute:
- cluster_centers_ndarray von Form (n_clusters, n_features)
Koordinaten der Cluster-Zentren. Wenn der Algorithmus vor vollständiger Konvergenz stoppt (siehe
tolundmax_iter), sind diese nicht konsistent mitlabels_.- labels_ndarray der Form (n_samples,)
Labels jedes Punkts
- inertia_float
Summe der quadrierten Abstände der Stichproben zu ihrem nächstgelegenen Cluster-Zentrum, gewichtet nach den Stichprobengewichten, falls vorhanden.
- n_iter_int
Anzahl der durchgeführten Iterationen.
- n_features_in_int
Anzahl der während des fits gesehenen Merkmale.
Hinzugefügt in Version 0.24.
- feature_names_in_ndarray mit Form (
n_features_in_,) Namen der während fit gesehenen Merkmale. Nur definiert, wenn
XMerkmalnamen hat, die alle Zeichenketten sind.Hinzugefügt in Version 1.0.
Siehe auch
MiniBatchKMeansAlternative Online-Implementierung, die inkrementelle Aktualisierungen der Zentrenpositionen mittels Mini-Batches durchführt. Für das Lernen im großen Maßstab (z. B. n_samples > 10k) ist MiniBatchKMeans wahrscheinlich viel schneller als die Standard-Batch-Implementierung.
Anmerkungen
Das K-Means-Problem wird entweder mit dem Lloyd- oder dem Elkan-Algorithmus gelöst.
Die durchschnittliche Komplexität ist gegeben durch O(k n T), wobei n die Anzahl der Stichproben und T die Anzahl der Iterationen ist.
Die Worst-Case-Komplexität ist gegeben durch O(n^(k+2/p)) mit n = n_samples, p = n_features. Siehe „How slow is the k-means method?“ D. Arthur und S. Vassilvitskii - SoCG2006. für weitere Details.
In der Praxis ist der K-Means-Algorithmus sehr schnell (einer der schnellsten verfügbaren Clustering-Algorithmen), aber er fällt in lokale Minima. Deshalb kann es nützlich sein, ihn mehrmals neu zu starten.
Wenn der Algorithmus vor vollständiger Konvergenz stoppt (wegen
tolodermax_iter), sindlabels_undcluster_centers_nicht konsistent, d.h. diecluster_centers_sind nicht die Mittelwerte der Punkte in jedem Cluster. Außerdem wird der Estimatorlabels_nach der letzten Iteration neu zuweisen, umlabels_mitpredictauf dem Trainingssatz konsistent zu machen.Beispiele
>>> from sklearn.cluster import KMeans >>> import numpy as np >>> X = np.array([[1, 2], [1, 4], [1, 0], ... [10, 2], [10, 4], [10, 0]]) >>> kmeans = KMeans(n_clusters=2, random_state=0, n_init="auto").fit(X) >>> kmeans.labels_ array([1, 1, 1, 0, 0, 0], dtype=int32) >>> kmeans.predict([[0, 0], [12, 3]]) array([1, 0], dtype=int32) >>> kmeans.cluster_centers_ array([[10., 2.], [ 1., 2.]])
Beispiele für häufige Probleme mit K-Means und wie man sie behebt, finden Sie unter Demonstration der K-Means-Annahmen.
Eine Demonstration, wie K-Means zur Clusterbildung von Textdokumenten verwendet werden kann, finden Sie unter Clustering von Textdokumenten mit k-means.
Ein Vergleich zwischen K-Means und MiniBatchKMeans finden Sie im Beispiel Vergleich der Clustering-Algorithmen K-Means und MiniBatchKMeans.
Ein Vergleich zwischen K-Means und BisectingKMeans finden Sie im Beispiel Vergleich der Leistung von Bisecting K-Means und regulärem K-Means.
- fit(X, y=None, sample_weight=None)[Quelle]#
Berechnet das K-Means-Clustering.
- Parameter:
- X{array-like, sparse matrix} der Form (n_samples, n_features)
Zu clusternde Trainingsinstanzen. Es ist zu beachten, dass die Daten in C-Reihenfolge konvertiert werden, was zu einer Speicherkopie führt, wenn die gegebenen Daten nicht C-kontinuierlich sind. Wenn eine spärliche Matrix übergeben wird, wird eine Kopie erstellt, wenn sie nicht im CSR-Format vorliegt.
- yIgnoriert
Nicht verwendet, hier zur API-Konsistenz durch Konvention vorhanden.
- sample_weightarray-like der Form (n_samples,), Standardwert=None
Die Gewichte für jede Beobachtung in X. Wenn None, erhalten alle Beobachtungen ein gleiches Gewicht.
sample_weightwird während der Initialisierung nicht verwendet, wenniniteine aufrufbare Funktion oder ein vom Benutzer bereitgestelltes Array ist.Hinzugefügt in Version 0.20.
- Gibt zurück:
- selfobject
Angepasster Schätzer.
- fit_predict(X, y=None, sample_weight=None)[Quelle]#
Berechnet Clusterzentren und sagt den Cluster-Index für jede Stichprobe voraus.
Bequemlichkeitsmethode; äquivalent zu fit(X) gefolgt von predict(X).
- Parameter:
- X{array-like, sparse matrix} der Form (n_samples, n_features)
Neue Daten zur Transformation.
- yIgnoriert
Nicht verwendet, hier zur API-Konsistenz durch Konvention vorhanden.
- sample_weightarray-like der Form (n_samples,), Standardwert=None
Die Gewichte für jede Beobachtung in X. Wenn None, erhalten alle Beobachtungen gleiches Gewicht.
- Gibt zurück:
- labelsndarray der Form (n_samples,)
Index des Clusters, zu dem jede Stichprobe gehört.
- fit_transform(X, y=None, sample_weight=None)[Quelle]#
Berechnet das Clustering und transformiert X in den Cluster-Entfernungsraum.
Äquivalent zu fit(X).transform(X), aber effizienter implementiert.
- Parameter:
- X{array-like, sparse matrix} der Form (n_samples, n_features)
Neue Daten zur Transformation.
- yIgnoriert
Nicht verwendet, hier zur API-Konsistenz durch Konvention vorhanden.
- sample_weightarray-like der Form (n_samples,), Standardwert=None
Die Gewichte für jede Beobachtung in X. Wenn None, erhalten alle Beobachtungen gleiches Gewicht.
- Gibt zurück:
- X_newndarray von Form (n_samples, n_clusters)
X transformiert in den neuen Raum.
- get_feature_names_out(input_features=None)[Quelle]#
Holt die Ausgabemerkmale für die Transformation.
Die Feature-Namen werden mit dem kleingeschriebenen Klassennamen präfixiert. Wenn der Transformer z.B. 3 Features ausgibt, dann sind die Feature-Namen:
["klassenname0", "klassenname1", "klassenname2"].- Parameter:
- input_featuresarray-like von str oder None, default=None
Wird nur verwendet, um die Feature-Namen mit den in
fitgesehenen Namen zu validieren.
- Gibt zurück:
- feature_names_outndarray von str-Objekten
Transformierte Merkmalnamen.
- get_metadata_routing()[Quelle]#
Holt das Metadaten-Routing dieses Objekts.
Bitte prüfen Sie im Benutzerhandbuch, wie der Routing-Mechanismus funktioniert.
- Gibt zurück:
- routingMetadataRequest
Ein
MetadataRequest, der Routing-Informationen kapselt.
- get_params(deep=True)[Quelle]#
Holt Parameter für diesen Schätzer.
- Parameter:
- deepbool, default=True
Wenn True, werden die Parameter für diesen Schätzer und die enthaltenen Unterobjekte, die Schätzer sind, zurückgegeben.
- Gibt zurück:
- paramsdict
Parameternamen, zugeordnet ihren Werten.
- predict(X)[Quelle]#
Sagt den nächstgelegenen Cluster voraus, zu dem jede Stichprobe in X gehört.
In der Vektorquantisierungsliteratur werden die
cluster_centers_als Codebuch bezeichnet, und jeder vonpredictzurückgegebene Wert ist der Index des nächstgelegenen Codes im Codebuch.- Parameter:
- X{array-like, sparse matrix} der Form (n_samples, n_features)
Neue Daten zur Vorhersage.
- Gibt zurück:
- labelsndarray der Form (n_samples,)
Index des Clusters, zu dem jede Stichprobe gehört.
- score(X, y=None, sample_weight=None)[Quelle]#
Das Gegenteil des Werts von X für das K-Means-Ziel.
- Parameter:
- X{array-like, sparse matrix} der Form (n_samples, n_features)
Neue Daten.
- yIgnoriert
Nicht verwendet, hier zur API-Konsistenz durch Konvention vorhanden.
- sample_weightarray-like der Form (n_samples,), Standardwert=None
Die Gewichte für jede Beobachtung in X. Wenn None, erhalten alle Beobachtungen gleiches Gewicht.
- Gibt zurück:
- scorefloat
Das Gegenteil des Werts von X für das K-Means-Ziel.
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') KMeans[Quelle]#
Konfiguriert, ob Metadaten für die
fit-Methode angefordert werden sollen.Beachten Sie, dass diese Methode nur relevant ist, wenn dieser Schätzer als Unter-Schätzer innerhalb eines Meta-Schätzers verwendet wird und Metadaten-Routing mit
enable_metadata_routing=Trueaktiviert ist (siehesklearn.set_config). Bitte lesen Sie das Benutzerhandbuch, um zu erfahren, wie der Routing-Mechanismus funktioniert.Die Optionen für jeden Parameter sind
True: Metadaten werden angefordert und, falls vorhanden, anfitübergeben. Die Anforderung wird ignoriert, wenn keine Metadaten vorhanden sind.False: Metadaten werden nicht angefordert und der Meta-Schätzer übergibt sie nicht anfit.None: Metadaten werden nicht angefordert und der Meta-Schätzer löst einen Fehler aus, wenn der Benutzer sie bereitstellt.str: Metadaten sollten mit diesem Alias an den Meta-Schätzer übergeben werden und nicht mit dem ursprünglichen Namen.
Der Standardwert (
sklearn.utils.metadata_routing.UNCHANGED) behält die bestehende Anforderung bei. Dies ermöglicht es Ihnen, die Anforderung für einige Parameter zu ändern und für andere nicht.Hinzugefügt in Version 1.3.
- Parameter:
- sample_weightstr, True, False, oder None, Standardwert=sklearn.utils.metadata_routing.UNCHANGED
Metadaten-Routing für den Parameter
sample_weightinfit.
- Gibt zurück:
- selfobject
Das aktualisierte Objekt.
- set_output(*, transform=None)[Quelle]#
Ausgabecontainer festlegen.
Siehe Einführung in die set_output API für ein Beispiel zur Verwendung der API.
- Parameter:
- transform{“default”, “pandas”, “polars”}, default=None
Konfiguriert die Ausgabe von
transformundfit_transform."default": Standardausgabeformat eines Transformers"pandas": DataFrame-Ausgabe"polars": Polars-AusgabeNone: Die Transformationskonfiguration bleibt unverändert
Hinzugefügt in Version 1.4: Die Option
"polars"wurde hinzugefügt.
- Gibt zurück:
- selfestimator instance
Schätzer-Instanz.
- set_params(**params)[Quelle]#
Setzt die Parameter dieses Schätzers.
Die Methode funktioniert sowohl bei einfachen Schätzern als auch bei verschachtelten Objekten (wie
Pipeline). Letztere haben Parameter der Form<component>__<parameter>, so dass es möglich ist, jede Komponente eines verschachtelten Objekts zu aktualisieren.- Parameter:
- **paramsdict
Schätzer-Parameter.
- Gibt zurück:
- selfestimator instance
Schätzer-Instanz.
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') KMeans[Quelle]#
Konfiguriert, ob Metadaten für die
score-Methode angefordert werden sollen.Beachten Sie, dass diese Methode nur relevant ist, wenn dieser Schätzer als Unter-Schätzer innerhalb eines Meta-Schätzers verwendet wird und Metadaten-Routing mit
enable_metadata_routing=Trueaktiviert ist (siehesklearn.set_config). Bitte lesen Sie das Benutzerhandbuch, um zu erfahren, wie der Routing-Mechanismus funktioniert.Die Optionen für jeden Parameter sind
True: Metadaten werden angefordert und, falls vorhanden, anscoreübergeben. Die Anforderung wird ignoriert, wenn keine Metadaten vorhanden sind.False: Metadaten werden nicht angefordert und der Meta-Schätzer übergibt sie nicht anscore.None: Metadaten werden nicht angefordert und der Meta-Schätzer löst einen Fehler aus, wenn der Benutzer sie bereitstellt.str: Metadaten sollten mit diesem Alias an den Meta-Schätzer übergeben werden und nicht mit dem ursprünglichen Namen.
Der Standardwert (
sklearn.utils.metadata_routing.UNCHANGED) behält die bestehende Anforderung bei. Dies ermöglicht es Ihnen, die Anforderung für einige Parameter zu ändern und für andere nicht.Hinzugefügt in Version 1.3.
- Parameter:
- sample_weightstr, True, False, oder None, Standardwert=sklearn.utils.metadata_routing.UNCHANGED
Metadaten-Routing für den Parameter
sample_weightinscore.
- Gibt zurück:
- selfobject
Das aktualisierte Objekt.
- transform(X)[Quelle]#
Transformiert X in einen Cluster-Entfernungsraum.
Im neuen Raum ist jede Dimension die Entfernung zu den Clusterzentren. Beachten Sie, dass auch wenn X dünn ist, das von
transformzurückgegebene Array normalerweise dicht ist.- Parameter:
- X{array-like, sparse matrix} der Form (n_samples, n_features)
Neue Daten zur Transformation.
- Gibt zurück:
- X_newndarray von Form (n_samples, n_clusters)
X transformiert in den neuen Raum.
Galeriebeispiele#
Vergleich der Leistung von Bisecting K-Means und Regular K-Means
Eine Demo des K-Means Clusterings auf den handschriftlichen Zifferndaten
Auswahl der Anzahl von Clustern mit Silhouette-Analyse auf KMeans-Clustering
Empirische Auswertung des Einflusses der K-Means Initialisierung
Vergleich der K-Means und MiniBatchKMeans Clustering-Algorithmen