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 можно обобщить следующими шагами:
Установить начальную стартовую конфигурацию, случайно или нет.
Вычислить стресс
Вычислите преобразование Гуттмана
Повторите шаги 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: Значение по умолчанию изменилось с
Falseto"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