Spec-Zone.ru › scikit-learn

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API