spectral_clustering#

sklearn.cluster.spectral_clustering(affinity, *, n_clusters=8, n_components=None, eigen_solver=None, random_state=None, n_init=10, eigen_tol='auto', assign_labels='kmeans', verbose=False)[Quelle]#

Wendet Clustering auf eine Projektion des normalisierten Laplace-Operators an.

In der Praxis ist Spectral Clustering sehr nützlich, wenn die Struktur der einzelnen Cluster stark nicht-konvex ist oder allgemeiner, wenn ein Maß für das Zentrum und die Streuung des Clusters keine geeignete Beschreibung des vollständigen Clusters darstellt. Zum Beispiel, wenn die Cluster verschachtelte Kreise auf der 2D-Ebene sind.

Wenn affinity die Adjazenzmatrix eines Graphen ist, kann diese Methode verwendet werden, um normalisierte Graph-Schnitte zu finden [1], [2].

Lesen Sie mehr im Benutzerhandbuch.

Parameter:
affinity{array-like, sparse matrix} von Form (n_samples, n_samples)

Die Affinitätsmatrix, die die Beziehung der zu integrierenden Stichproben beschreibt. **Muss symmetrisch sein**.

Mögliche Beispiele
  • Adjazenzmatrix eines Graphen,

  • Wärmekern der paarweisen Distanzmatrix der Stichproben,

  • symmetrische k-nächste-Nachbarn-Konnektivitätsmatrix der Stichproben.

n_clustersint, Standardwert=None

Anzahl der zu extrahierenden Cluster.

n_componentsint, Standardwert=n_clusters

Anzahl der zu verwendenden Eigenvektoren für die spektrale Einbettung.

eigen_solver{None, ‘arpack’, ‘lobpcg’, oder ‘amg’}

Die Methode zur Eigenwertzerlegung. Wenn None dann wird 'arpack' verwendet. Siehe [4] für weitere Details zu 'lobpcg'. Der Eigensolver 'amg' führt 'lobpcg' mit optionaler algebraischer Mehrgitter-Vorkonditionierung aus und erfordert die Installation von pyamg. Er kann bei sehr großen dünn besetzten Problemen schneller sein [6] und [7].

random_stateint, RandomState instance, default=None

Ein pseudo-zufälliger Zahlen-Generator, der für die Initialisierung der lobpcg-Eigenvektorzerlegung verwendet wird, wenn eigen_solver == 'amg', und für die K-Means-Initialisierung. Verwenden Sie eine Ganzzahl, um die Ergebnisse über Aufrufe hinweg deterministisch zu machen (siehe Glossar).

Hinweis

Bei Verwendung von eigen_solver == 'amg' ist es notwendig, auch den globalen Numpy-Seed mit np.random.seed(int) festzulegen, um deterministische Ergebnisse zu erzielen. Siehe pyamg/pyamg#139 für weitere Informationen.

n_initint, Standard=10

Anzahl der Durchläufe, bei denen der k-Means-Algorithmus mit unterschiedlichen Zentroiden-Seeds ausgeführt wird. Die Endergebnisse sind die besten Ergebnisse aus n_init aufeinanderfolgenden Durchläufen in Bezug auf die Trägheit. Nur verwendet, wenn assign_labels='kmeans'.

eigen_tolfloat, default=”auto”

Stoppkriterium für die Eigenwertzerlegung der Laplaceschen Matrix. Wenn eigen_tol="auto" dann hängt die übergebene Toleranz vom eigen_solver ab.

  • Wenn eigen_solver="arpack", dann ist eigen_tol=0.0;

  • Wenn eigen_solver="lobpcg" oder eigen_solver="amg", dann ist eigen_tol=None, was den zugrunde liegenden lobpcg-Solver so konfiguriert, dass der Wert gemäß seinen Heuristiken automatisch aufgelöst wird. Siehe scipy.sparse.linalg.lobpcg für Details.

Beachten Sie, dass bei Verwendung von eigen_solver="lobpcg" oder eigen_solver="amg" Werte von tol<1e-5 zu Konvergenzproblemen führen können und vermieden werden sollten.

Hinzugefügt in Version 1.2: Option 'auto' hinzugefügt.

assign_labels{‘kmeans’, ‘discretize’, ‘cluster_qr’}, Standardwert=’kmeans’

Die Strategie zur Zuweisung von Labels im Einbettungsraum. Es gibt drei Möglichkeiten, Labels nach der spektralen Einbettung zuzuweisen. k-means kann angewendet werden und ist eine beliebte Wahl. Es kann jedoch auch empfindlich auf die Initialisierung reagieren. Diskretisierung ist ein weiterer Ansatz, der weniger empfindlich auf zufällige Initialisierung reagiert [3]. Die cluster_qr-Methode [5] extrahiert Cluster direkt aus Eigenvektoren beim spektralen Clustering. Im Gegensatz zu k-means und Diskretisierung hat cluster_qr keine Tuning-Parameter und ist keine iterative Methode, kann aber k-means und Diskretisierung in Bezug auf Qualität und Geschwindigkeit übertreffen. Eine detaillierte Vergleich der Clustering-Strategien finden Sie im folgenden Beispiel: Segmentierung des Bildes griechischer Münzen in Regionen.

Geändert in Version 1.1: Neue Label-Methode 'cluster_qr' hinzugefügt.

verbosebool, default=False

Ausführlichkeitsmodus.

Hinzugefügt in Version 0.24.

Gibt zurück:
labelsArray von Ganzzahlen, Form: n_samples

Die Labels der Cluster.

Anmerkungen

Der Graph sollte nur eine zusammenhängende Komponente enthalten, ansonsten sind die Ergebnisse wenig sinnvoll.

Dieser Algorithmus löst den normalisierten Schnitt für k=2: es handelt sich um ein normalisiertes spektrales Clustering.

Referenzen

Beispiele

>>> import numpy as np
>>> from sklearn.metrics.pairwise import pairwise_kernels
>>> from sklearn.cluster import spectral_clustering
>>> X = np.array([[1, 1], [2, 1], [1, 0],
...               [4, 7], [3, 5], [3, 6]])
>>> affinity = pairwise_kernels(X, metric='rbf')
>>> spectral_clustering(
...     affinity=affinity, n_clusters=2, assign_labels="discretize", random_state=0
... )
array([1, 1, 1, 0, 0, 0])