spectral_embedding#
- sklearn.manifold.spectral_embedding(adjacency, *, n_components=8, eigen_solver=None, random_state=None, eigen_tol='auto', norm_laplacian=True, drop_first=True)[Quelle]#
Projiziert die Stichprobe auf die ersten Eigenvektoren des Graphen-Laplace-Operators.
Die Adjazenzmatrix wird verwendet, um einen normalisierten Graphen-Laplace-Operator zu berechnen, dessen Spektrum (insbesondere die Eigenvektoren, die den kleinsten Eigenwerten zugeordnet sind) eine Interpretation in Bezug auf die minimale Anzahl von Schnitten hat, die erforderlich sind, um den Graphen in vergleichbar große Komponenten zu zerlegen.
Dieses Embedding kann auch „funktionieren“, auch wenn die Variable
adjacencynicht streng genommen die Adjazenzmatrix eines Graphen ist, sondern allgemeiner eine Ähnlichkeits- oder Ähnlichkeitsmatrix zwischen Stichproben (z. B. der Wärmekern einer Euklidischen Distanzmatrix oder eine k-NN-Matrix).Es muss jedoch darauf geachtet werden, die Ähnlichkeitsmatrix immer symmetrisch zu machen, damit die Eigenvektordekompensation wie erwartet funktioniert.
Hinweis: Laplacian Eigenmaps ist der hier implementierte eigentliche Algorithmus.
Mehr dazu im Benutzerhandbuch.
- Parameter:
- adjacency{array-like, sparse graph} von Form (n_samples, n_samples)
Die Adjazenzmatrix des zu einbettenden Graphen.
- n_componentsint, Standardwert=8
Die Dimension des Projektionsunterraums.
- eigen_solver{‘arpack’, ‘lobpcg’, ‘amg’}, default=None
Die verwendete Strategie für die Eigenwertzerlegung. AMG erfordert, dass pyamg installiert ist. Dies kann bei sehr großen, spärlichen Problemen schneller sein, kann aber auch zu Instabilitäten führen. Wenn None, dann wird
'arpack'verwendet.- random_stateint, RandomState-Instanz oder None, default=None
Ein Pseudo-Zufallszahlengenerator, der für die Initialisierung der lobpcg-Eigenvektorzerlegung verwendet wird, wenn
eigen_solver == 'amg'ist, und für die K-Means-Initialisierung. Verwenden Sie eine ganze Zahl, 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 mitnp.random.seed(int)festzulegen, um deterministische Ergebnisse zu erzielen. Siehe pyamg/pyamg#139 für weitere Informationen.- eigen_tolfloat, default=”auto”
Stoppkriterium für die Eigenwertzerlegung der Laplaceschen Matrix. Wenn
eigen_tol="auto"dann hängt die übergebene Toleranz vomeigen_solverab.Wenn
eigen_solver="arpack", dann isteigen_tol=0.0;Wenn
eigen_solver="lobpcg"odereigen_solver="amg", dann isteigen_tol=None, was den zugrunde liegendenlobpcg-Solver so konfiguriert, dass der Wert gemäß seinen Heuristiken automatisch aufgelöst wird. Siehescipy.sparse.linalg.lobpcgfür Details.
Beachten Sie, dass bei Verwendung von
eigen_solver="amg"Werte vontol<1e-5zu Konvergenzproblemen führen können und vermieden werden sollten.Hinzugefügt in Version 1.2: Option 'auto' hinzugefügt.
- norm_laplacianbool, Standardwert=True
Wenn True, wird der symmetrische normalisierte Laplace-Operator berechnet.
- drop_firstbool, Standardwert=True
Ob der erste Eigenvektor verworfen werden soll. Für spektrales Embedding sollte dies True sein, da der erste Eigenvektor für einen verbundenen Graphen ein konstanter Vektor sein sollte, für spektrales Clustering sollte dies jedoch auf False gesetzt werden, um den ersten Eigenvektor beizubehalten.
- Gibt zurück:
- embeddingndarray von Form (n_samples, n_components)
Die reduzierten Stichproben.
Anmerkungen
Spektrales Embedding (Laplacian Eigenmaps) ist am nützlichsten, wenn der Graph eine zusammenhängende Komponente hat. Wenn der Graph viele Komponenten hat, werden die ersten paar Eigenvektoren einfach die zusammenhängenden Komponenten des Graphen aufdecken.
Referenzen
Beispiele
>>> from sklearn.datasets import load_digits >>> from sklearn.neighbors import kneighbors_graph >>> from sklearn.manifold import spectral_embedding >>> X, _ = load_digits(return_X_y=True) >>> X = X[:100] >>> affinity_matrix = kneighbors_graph( ... X, n_neighbors=int(X.shape[0] / 10), include_self=True ... ) >>> # make the matrix symmetric >>> affinity_matrix = 0.5 * (affinity_matrix + affinity_matrix.T) >>> embedding = spectral_embedding(affinity_matrix, n_components=2, random_state=42) >>> embedding.shape (100, 2)