smacof#

sklearn.manifold.smacof(несходства, *, метрика=True, n_components=2, init=None, n_init='warn', n_jobs=None, max_iter=300, verbose=0, eps=1e-06, random_state=None, return_n_iter=False, normalized_stress='auto')[источник]#

Вычисление многомерного шкалирования с использованием алгоритма SMACOF.

Алгоритм SMACOF (Scaling by MAjorizing a COmplicated Function) — это алгоритм многомерного шкалирования, который минимизирует целевую функцию ( стресс) с использованием техники мажоризации. Мажоризация стресса, также известная как преобразование Гуттмана, гарантирует монотонную сходимость стресса и является более мощной, чем традиционные методы, такие как градиентный спуск.

Алгоритм SMACOF для метрического MDS можно обобщить следующими шагами:

  1. Установить начальную стартовую конфигурацию, случайно или нет.

  2. Вычислить стресс

  3. Вычислите преобразование Гуттмана

  4. Повторите шаги 2 и 3 до сходимости.

Неметрический алгоритм добавляет шаг монотонной регрессии перед вычислением стресса.

Параметры:
несходстваarray-like формы (n_samples, n_samples)

Попарные различия между точками. Должны быть симметричными.

метрикаbool, по умолчанию=True

Вычислить метрический или неметрический алгоритм SMACOF. Когда False (т.е. неметрический MDS), несходства с 0 считаются пропущенными значениями.

n_componentsint, по умолчанию=2

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

initarray-like формы (n_samples, n_components), default=None

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

n_initint, по умолчанию=8

Количество запусков алгоритма SMACOF с различными инициализациями. Конечные результаты будут лучшим выводом из запусков, определяемым запуском с наименьшим конечным стрессом. Если init предоставлен, эта опция переопределяется, и выполняется один запуск.

Изменено в версии 1.9: Значение по умолчанию для n_iter изменится с 8 на 1 в версии 1.9.

n_jobsint, default=None

Количество заданий для вычислений. Если используется несколько инициализаций (n_init), каждая итерация алгоритма вычисляется параллельно.

None означает 1, если только не в joblib.parallel_backend контекст. -1 означает использование всех процессоров. См. Глоссарий для получения дополнительной информации.

max_iterint, по умолчанию=300

Максимальное количество итераций алгоритма SMACOF для одного запуска.

verboseint, по умолчанию=0

Уровень подробности вывода.

epsfloat, по умолчанию=1e-6

Допуск относительно стресса (нормализованного суммой квадратов расстояний вложения), при котором объявляется сходимость.

Изменено в версии 1.7: Значение по умолчанию для eps изменилось с 1e-3 на 1e-6 в результате исправления ошибки в вычислении критерия сходимости.

random_stateint, экземпляр RandomState или None, по умолчанию=None

Определяет генератор случайных чисел, используемый для инициализации центров. Передайте целое число для воспроизводимых результатов при многократных вызовах функции. См. Глоссарий.

return_n_iterbool, по умолчанию=False

Возвращать или нет количество итераций.

normalized_stressbool или "auto", по умолчанию="auto"

Возвращать ли нормализованное значение стресса (Stress-1) вместо сырого стресса. По умолчанию метрический MDS возвращает сырой стресс, а неметрический MDS возвращает нормализованный стресс.

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

Изменено в версии 1.4: Значение по умолчанию изменилось с False to "auto" в версии 1.4.

Изменено в версии 1.7: Нормализованный стресс теперь также поддерживается для метрического MDS.

Возвращает:
Xndarray формы (n_samples, n_components)

Координаты точек в n_components-пространстве.

стрессfloat

Конечное значение стресса (сумма квадратов расстояний между диспаритетами и расстояниями для всех ограниченных точек). Если normalized_stress=True, возвращает Stress-1. Значение 0 указывает на "идеальное" соответствие, 0.025 — отличное, 0.05 — хорошее, 0.1 — удовлетворительное, а 0.2 — плохое [1].

n_iterint

Количество итераций, соответствующих наилучшему стрессу. Возвращается только если return_n_iter установлено в True.

Ссылки

[1]

“Неметрическое многомерное шкалирование: численный метод” Крускал, Дж. Психометрика, 29 (1964)

[2]

“Multidimensional scaling by optimizing goodness of fit to a nonmetric hypothesis” Kruskal, J. Psychometrika, 29, (1964)

[3]

«Современное многомерное шкалирование - теория и приложения» Борг, И.; Грунен П. Серия Springer по статистике (1997)

Примеры

>>> import numpy as np
>>> from sklearn.manifold import smacof
>>> from sklearn.metrics import euclidean_distances
>>> X = np.array([[0, 1, 2], [1, 0, 3], [2, 3, 0]])
>>> dissimilarities = euclidean_distances(X)
>>> Z, stress = smacof(
...     dissimilarities, n_components=2, n_init=1, eps=1e-6, random_state=42
... )
>>> Z.shape
(3, 2)
>>> np.round(stress, 6).item()
3.2e-05