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 adjacency nicht 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 mit np.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 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="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.

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)