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
  • “Toward the Optimal Preconditioned Eigensolver: Locally Optimal Block Preconditioned Conjugate Gradient Method”, 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–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/modules/generated/sklearn.manifold.spectral_embedding.html

Spec-Zone.ru

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