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)[source]
-
Проецирует выборку на первые собственные векторы лапласиана графа.
Матрица смежности используется для вычисления нормализованного лапласиана графа, спектр которого (особенно собственные векторы, соответствующие наименьшим собственным значениям) можно интерпретировать как минимальное число разрезов, необходимых для разделения графа на компоненты сопоставимого размера.
Это вложение может «работать», даже если переменная
adjacencyне является строго матрицей смежности графа, а представляет собой более общий случай матрицы близости или сходства между образцами (например, тепловое ядро матрицы евклидовых расстояний или матрица k ближайших соседей).Однако необходимо следить за тем, чтобы матрица близости всегда была симметричной: это необходимо для корректного разложения на собственные векторы.
Примечание: здесь реализован алгоритм Laplacian Eigenmaps.
Подробнее см. в руководстве пользователя.
- Параметры:
-
- adjacency{array-like, sparse graph} of shape (n_samples, n_samples)
-
Матрица смежности графа, который требуется вложить.
- n_componentsint, default=8
-
Размерность подпространства проекции.
- eigen_solver{‘arpack’, ‘lobpcg’, ‘amg’}, default=None
-
Стратегия разложения на собственные значения. Для AMG требуется установленный пакет pyamg. Этот метод может быть быстрее на очень больших разреженных задачах, но также может приводить к нестабильности. Если задано None, используется
'arpack'. - random_stateint, RandomState instance or None, default=None
-
Генератор псевдослучайных чисел, используемый для инициализации разложения на собственные векторы с помощью lobpcg, когда задано
eigen_solver == 'amg', а также для инициализации K-Means. Укажите целое число, чтобы результаты были детерминированными при каждом вызове (см. глоссарий).Примечание
При использовании
eigen_solver == 'amg'для получения детерминированных результатов также необходимо зафиксировать глобальное начальное значение numpy с помощьюnp.random.seed(int). Дополнительную информацию см. в pyamg/pyamg#139. - eigen_tolfloat, default=”auto”
-
Критерий остановки разложения матрицы Лапласа на собственные значения. Если задано
eigen_tol="auto", переданный допуск зависит отeigen_solver:- Если задано
eigen_solver="arpack", тоeigen_tol=0.0; - Если задано
eigen_solver="lobpcg"илиeigen_solver="amg", тоeigen_tol=None, что настраивает используемый решательlobpcgна автоматический выбор значения в соответствии с эвристиками. Подробности см. вscipy.sparse.linalg.lobpcg.
Обратите внимание: при использовании
eigen_solver="amg"значенияtol<1e-5могут приводить к проблемам сходимости, поэтому их следует избегать.Добавлено в версии 1.2: Добавлена опция ‘auto’.
- Если задано
- norm_laplacianbool, default=True
-
Если True, вычисляется симметричный нормализованный лапласиан.
- drop_firstbool, default=True
-
Определяет, нужно ли отбрасывать первый собственный вектор. Для спектрального вложения следует задать True, поскольку для связного графа первый собственный вектор должен быть постоянным. Для спектральной кластеризации следует задать False, чтобы сохранить первый собственный вектор.
- Возвращает:
-
- embeddingndarray of shape (n_samples, n_components)
-
Образцы в уменьшенном пространстве.
Примечания
Спектральное вложение (Laplacian Eigenmaps) наиболее полезно, когда граф имеет одну связную компоненту. Если граф имеет много компонент, первые несколько собственных векторов просто выявят связные компоненты графа.
Литература
- https://en.wikipedia.org/wiki/LOBPCG
- «К оптимальному предобусловленному решателю собственных значений: локально оптимальный блочный метод сопряжённых градиентов с предобусловливанием», Andrew V. Knyazev
Примеры
>>> 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)
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/generated/sklearn.manifold.spectral_embedding.html