Spec-Zone.ru › scikit-learn

SpectralClustering

classsklearn.cluster.SpectralClustering(n_clusters=8, *, eigen_solver=None, n_components=None, random_state=None, n_init=10, gamma=1.0, affinity='rbf', n_neighbors=10, eigen_tol='auto', assign_labels='kmeans', degree=3, coef0=1, kernel_params=None, n_jobs=None, verbose=False)[исходный код]

Выполняет кластеризацию проекции нормализованного лапласиана.

На практике спектральная кластеризация очень полезна, когда структура отдельных кластеров является сильно невыпуклой, или, в более общем случае, когда оценка центра и разброса кластера не подходит для описания кластера целиком, например, когда кластеры представляют собой вложенные окружности на двумерной плоскости.

Если матрица близости является матрицей смежности графа, этот метод можно использовать для поиска нормализованных разрезов графа [1], [2].

При вызове fit матрица близости строится с использованием либо ядерной функции, например гауссовского ядра (также известного как ядро RBF) с евклидовым расстоянием d(X, X):

np.exp(-gamma * d(X,X) ** 2)

либо матрицы связности k ближайших соседей.

Также можно задать предоставленную пользователем матрицу близости, установив affinity='precomputed'.

Подробнее см. в Руководстве пользователя.

Параметры:
n_clustersint, default=8

Количество кластеров для извлечения.

eigen_solver{‘arpack’, ‘lobpcg’, ‘amg’}, default=None

Стратегия разложения на собственные значения. Для AMG необходимо установить pyamg. Этот метод может быть быстрее при работе с очень большими разреженными задачами, но также может привести к нестабильности. Если None, используется 'arpack'. Подробнее см. [4], где рассматривается 'lobpcg'.

n_componentsint, default=None

Количество собственных векторов для спектрального вложения. Если None, по умолчанию используется n_clusters.

random_stateint, RandomState instance, default=None

Генератор псевдослучайных чисел для инициализации разложения собственных векторов lobpcg при eigen_solver == 'amg' и для инициализации K-Means. Используйте целое число, чтобы результаты оставались неизменными при повторных вызовах (см. Глоссарий).

Примечание

При использовании eigen_solver == 'amg' для получения детерминированных результатов необходимо также зафиксировать глобальное начальное значение numpy с помощью np.random.seed(int). Дополнительную информацию см. в pyamg/pyamg#139.

n_initint, default=10

Количество запусков алгоритма k-means с разными начальными значениями центроидов. Итоговым результатом будет лучший результат из n_init последовательных запусков по показателю инерции. Используется только при assign_labels='kmeans'.

gammafloat, default=1.0

Коэффициент ядра для ядер rbf, poly, sigmoid, laplacian и chi2. Игнорируется для affinity='nearest_neighbors', affinity='precomputed' или affinity='precomputed_nearest_neighbors'.

affinitystr or callable, default=’rbf’
Способ построения матрицы близости.
  • ‘nearest_neighbors’: построить матрицу близости, вычислив граф ближайших соседей.
  • ‘rbf’: построить матрицу близости с использованием ядра радиальной базисной функции (RBF).
  • ‘precomputed’: интерпретировать X как предварительно вычисленную матрицу близости, в которой большие значения указывают на большее сходство между объектами.
  • ‘precomputed_nearest_neighbors’: интерпретировать X как разреженный граф предварительно вычисленных расстояний и построить бинарную матрицу близости по n_neighbors ближайшим соседям каждого объекта.
  • одно из ядер, поддерживаемых pairwise_kernels.

Следует использовать только ядра, возвращающие оценки сходства (неотрицательные значения, возрастающие вместе со сходством). Алгоритм кластеризации не проверяет выполнение этого свойства.

n_neighborsint, default=10

Количество соседей для построения матрицы близости методом ближайших соседей. Игнорируется для affinity='rbf'.

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="lobpcg" или eigen_solver="amg" значения tol<1e-5 могут привести к проблемам со сходимостью, поэтому их следует избегать.

Добавлено в версии 1.2: Добавлен параметр ‘auto’.

assign_labels{‘kmeans’, ‘discretize’, ‘cluster_qr’}, default=’kmeans’

Стратегия присвоения меток в пространстве вложения. После вложения Лапласа есть два способа назначить метки. k-means — популярный вариант, но он чувствителен к инициализации. Дискретизация — ещё один подход, менее чувствительный к случайной инициализации [3]. Метод cluster_qr [5] непосредственно извлекает кластеры из собственных векторов при спектральной кластеризации. В отличие от k-means и дискретизации, cluster_qr не имеет настраиваемых параметров и не выполняет итераций, но при этом может превосходить k-means и дискретизацию как по качеству, так и по скорости.

Изменено в версии 1.1: Добавлен новый метод присвоения меток ‘cluster_qr’.

degreefloat, default=3

Степень полиномиального ядра. Игнорируется другими ядрами.

coef0float, default=1

Свободный коэффициент для полиномиального ядра и ядра sigmoid. Игнорируется другими ядрами.

kernel_paramsdict of str to any, default=None

Параметры (именованные аргументы) и значения для ядра, передаваемого в виде вызываемого объекта. Игнорируется другими ядрами.

n_jobsint, default=None

Количество параллельных заданий для выполнения при affinity='nearest_neighbors' или affinity='precomputed_nearest_neighbors'. Поиск соседей будет выполняться параллельно. None означает 1, если только не используется контекст joblib.parallel_backend. -1 означает использование всех процессоров. Подробнее см. в Глоссарии.

verbosebool, default=False

Режим подробного вывода.

Добавлено в версии 0.24.

Атрибуты:
affinity_matrix_array-like of shape (n_samples, n_samples)

Матрица близости, используемая для кластеризации. Доступна только после вызова fit.

labels_ndarray of shape (n_samples,)

Метки каждой точки

n_features_in_int

Количество признаков, обнаруженных во время обучения.

Добавлено в версии 0.24.

feature_names_in_ndarray of shape (n_features_in_,)

Имена признаков, обнаруженных во время обучения. Определяется только в том случае, если X содержит имена признаков, представленные строками.

Добавлено в версии 1.0.

См. также

sklearn.cluster.KMeans

Кластеризация методом K-Means.

sklearn.cluster.DBSCAN

Пространственная кластеризация приложений на основе плотности с шумом.

Примечания

Матрицу расстояний, в которой 0 обозначает идентичные элементы, а большие значения — сильно различающиеся элементы, можно преобразовать в матрицу близости / сходства, подходящую для алгоритма, применив гауссовское ядро (также известное как RBF-ядро или тепловое ядро):

np.exp(- dist_matrix ** 2 / (2. * delta ** 2))

где delta — свободный параметр, представляющий ширину гауссовского ядра.

Альтернативный вариант — взять симметричную версию матрицы связности k ближайших соседей точек.

Если установлен пакет pyamg, он используется для значительного ускорения вычислений.

Список литературы

[1]

Нормализованные разрезы и сегментация изображений, 2000, Jianbo Shi, Jitendra Malik

[2]

Введение в спектральную кластеризацию, 2007, Ulrike von Luxburg

[3]

Многоклассовая спектральная кластеризация, 2003, Stella X. Yu, Jianbo Shi

[4]

К оптимальному предобусловленному решателю собственных значений: локально оптимальный блочный метод сопряжённых градиентов с предобусловливанием, 2001, A. V. Knyazev, SIAM Journal on Scientific Computing 23, № 2, с. 517–541.

[5]

Простая, прямая и эффективная многопутевая спектральная кластеризация, 2019, Anil Damle, Victor Minden, Lexing Ying

Примеры

>>> from sklearn.cluster import SpectralClustering
>>> import numpy as np
>>> X = np.array([[1, 1], [2, 1], [1, 0],
...               [4, 7], [3, 5], [3, 6]])
>>> clustering = SpectralClustering(n_clusters=2,
...         assign_labels='discretize',
...         random_state=0).fit(X)
>>> clustering.labels_
array([1, 1, 1, 0, 0, 0])
>>> clustering
SpectralClustering(assign_labels='discretize', n_clusters=2,
    random_state=0)

Сравнение спектральной кластеризации с другими алгоритмами кластеризации см. в разделе Сравнение различных алгоритмов кластеризации на игрушечных наборах данных

fit(X, y=None)[исходный код]

Выполняет спектральную кластеризацию на основе признаков или матрицы близости.

Параметры:
X{array-like, sparse matrix} of shape (n_samples, n_features) or (n_samples, n_samples)

Обучающие объекты для кластеризации; сходства / близости между объектами, если affinity='precomputed', или расстояния между объектами, если affinity='precomputed_nearest_neighbors. Если разреженная матрица задана в формате, отличном от csr_matrix, csc_matrix или coo_matrix, она будет преобразована в разреженную матрицу csr_matrix.

yИгнорируется

Не используется; присутствует здесь по соглашению для единообразия API.

Возвращает:
selfobject

Обученный экземпляр оценщика.

fit_predict(X, y=None)[исходный код]

Выполняет спектральную кластеризацию для X и возвращает метки кластеров.

Параметры:
X{array-like, sparse matrix} of shape (n_samples, n_features) or (n_samples, n_samples)

Обучающие объекты для кластеризации; сходства / близости между объектами, если affinity='precomputed', или расстояния между объектами, если affinity='precomputed_nearest_neighbors. Если разреженная матрица задана в формате, отличном от csr_matrix, csc_matrix или coo_matrix, она будет преобразована в разреженную матрицу csr_matrix.

yИгнорируется

Не используется; присутствует здесь по соглашению для единообразия API.

Возвращает:
labelsndarray of shape (n_samples,)

Метки кластеров.

get_metadata_routing()[исходный код]

Возвращает маршрутизацию метаданных этого объекта.

О том, как работает механизм маршрутизации, см. в Руководстве пользователя.

Возвращает:
routingMetadataRequest

Объект MetadataRequest, содержащий сведения о маршрутизации.

get_params(deep=True)[исходный код]

Возвращает параметры этого оценщика.

Параметры:
deepbool, default=True

Если True, возвращает параметры этого оценщика и содержащихся в нём подобъектов, являющихся оценщиками.

Возвращает:
paramsdict

Имена параметров, сопоставленные их значениям.

set_params(**params)[исходный код]

Задаёт параметры этого оценщика.

Метод работает как с простыми оценщиками, так и с вложенными объектами (например, Pipeline). Параметры последних имеют вид <component>__<parameter>, что позволяет обновлять каждый компонент вложенного объекта.

Параметры:
**paramsdict

Параметры оценщика.

Возвращает:
selfestimator instance

Экземпляр оценщика.

Примеры из галереи

Сравнение различных алгоритмов кластеризации на игрушечных наборах данных

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/generated/sklearn.cluster.SpectralClustering.html

Spec-Zone.ru

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