Вопрос или проблема
Я взял данные с здесь и хотел поиграть с многомерным шкалированием на этих данных. Данные выглядят следующим образом:
В частности, я хочу отложить города в 2D-пространстве и посмотреть, насколько это соответствует их реальному расположению на географической карте, исходя только из информации о том, насколько далеко они друг от друга, без каких-либо явных данных о широте и долготе. Вот мой код:
import pandas as pd
import numpy as np
from sklearn import manifold
import matplotlib.pyplot as plt
data = pd.read_csv("european_city_distances.csv", index_col="Cities")
mds = manifold.MDS(n_components=2, dissimilarity="precomputed", random_state=6)
results = mds.fit(data.values)
cities = data.columns
coords = results.embedding_
fig = plt.figure(figsize=(12,10))
plt.subplots_adjust(bottom = 0.1)
plt.scatter(coords[:, 0], coords[:, 1])
for label, x, y in zip(cities, coords[:, 0], coords[:, 1]):
plt.annotate(
label,
xy = (x, y),
xytext = (-20, 20),
textcoords="offset points"
)
plt.show()
Большинство городов, кажется, находятся примерно на правильных общих позициях относительно друг друга, за исключением некоторых неточностей – Дублин находится слишком далеко от Лондона, Стамбул расположен неправильно и т.д. Однако, если я изменю значение random_state
, получится другая “карта”. Например, random_state=1
предоставляет следующую карту, где многие города, похоже, не находятся на правильных общих позициях относительно других городов:
Что я не понимаю, так это то, что методы снижения размерности не должны иметь связанную с ними случайность, и, следовательно, не должны давать разные результаты для различных семян. Но здесь это так; так что это означает?
Документация к функции sklearn.manifold.MDS
утверждает, что random_state
– это “генератор, используемый для инициализации центров”. Поэтому, в частности, я думаю, что спрашиваю, что бы мы ни выбрали для инициализации центров, разве все они не должны приводить к одному уникальному результату?
Я получаю гораздо более “точную” карту (по крайней мере, на мой взгляд), задавая следующие значения гиперпараметров:
mds = manifold.MDS(n_components=2, dissimilarity="euclidean", n_init=100, max_iter=1000, random_state=1)
Я думаю, что ответ на вашу проблему заключается в том, чтобы понять, что матрицы евклидова расстояния слишком сложны, чтобы раскрыть информацию. Основная идея заключается в том, что существует множество скрытых ограничений, которые необходимо проверить (n*(n-1)/2 ограничений для 2n переменных).
Один из способов решить эту проблему за приемлемое время для человека – рассмотреть ‘физические’ подходы. В основном вы помещаете крошечные пружины и другие силы между вашими данными и решаете проблему физической системы. Поэтому вы обычно видите, как графики ‘качели’ при их построении. Как вы можете догадаться, такие подходы сильно зависят от инициализации точек в пространстве. Вот почему в обычных методах есть ‘случайный’ компонент.
Добрый вечер,
То, что у вас есть выше, можно назвать вращением вокруг оси. Что вам нужно отметить, так это то, что координаты после снижения размерности могут не обязательно иметь значение. Что делает MDS, так это преобразует данные, сохраняя расстояния (евклидово расстояние в вашем случае) между наблюдениями.
Чтобы поставить это в контекст, посмотрите на первые два графика и найдите Мадрид и Дублин. Вы увидите, что их положение на втором графике противоположно первому графику. Но в данных вы увидите, что фактическое расстояние между двумя точками остается прежним.
Подумайте об этом так: у вас есть два объекта в комнате: стул и стол, которые находятся на расстоянии 1 метра друг от друга. Если вы стоите рядом со стулом, для вас стол находится дальше. С другой стороны, если вы стоите рядом со столом, для вас стул находится дальше. Но расстояние между ними всегда составляет 1 метр.
Таким образом, система координат является представлением позиции того, как вы смотрите на точки данных в более низкой размерности, сохраняя при этом евклидово расстояние между точками данных из исходного набора данных более высокой размерности.
Вы также можете попробовать выполнить масштабирование с помощью PCA или t-SNE, если вам интересно увидеть, как различные техники снижения размерности работают с этими данными.
Надеюсь, это поможет!
Ответ или решение
Различные Результаты Многоразмерного Масштабирования в Зависимости от Начального Состояния
Когда вы используете метод многоразмерного масштабирования (MDS) для визуализации данных о расстояниях между городами, вы можете заметить, что результаты сильно зависят от значения параметра random_state
. Это поведение может вызывать путаницу, так как многие методы уменьшения размерности, такие как PCA, предполагают, что результат не должен зависеть от случайного начального состояния. Давайте разберем причины, по которым MDS может вести себя иначе, и как использовать параметры для оптимизации результатов.
Природа MDS и Случайность
Метод многоразмерного масштабирования строит низкоразмерное представление высокоразмерных данных, сохраняя при этом расстояния между объектами. Однако в отличие от PCA, где определение главных компонент обеспечивает однозначное решение, MDS включает не только вычисления на основе расстояний, но и случайные начальные положения для объектов в новом пространстве.
Параметр random_state
в функции sklearn.manifold.MDS
отвечает за инициализацию центров, что может приводить к разным конфигурациям в зависимости от этого начального положения. Это создаёт вероятность различий в результатах, так как алгоритм может "застрять" в различных локальных минимумах зависимости от начального состояния.
Анализ Измерений и Соотношение Расстояний
Хотя вы правы, утверждая, что размеры и расстояния должны сохраняться, важно понимать, что MDS может создавать различные представления данной информации. Например, координаты после применения метода могут быть относительно точными с точки зрения расстояний, но могут подвергаться произвольным преобразованиям, таким как повороты или сдвиги. Это как если бы вы находились в комнате, где расстояние между столом и стулом постоянно, но ваше восприятие их положения будет зависеть от того, под каким углом вы смотрите на них.
Установка Параметров Модели
С учётом вышесказанного, есть несколько параметров MDS, которые могут помочь повысить качество ваших выводов:
n_init
: Увеличение этого параметра позволяет запустить алгоритм многократно, что может помочь найти лучшее локальное решение.max_iter
: Этот параметр определяет максимальное количество итераций для оптимизации и может быть увеличен для поиска более точных результатов.
Использование параметров таким образом существенно повысит стабильность и точность результатов. Например, установка n_init=100
и max_iter=1000
обеспечит большее число проверок, что может привести к более адекватному размещению.
Альтернативные Методики
Кроме того, если вам интересны результаты других методов, вы можете рассмотреть использование PCA или t-SNE. Эти техники предлагают разные способы уменьшения размерности, которые могут продемонстрировать лучшие или дополнительные перспективы по сравнению с MDS, особенно для визуализации сложных многомерных данных.
Заключение
Таким образом, различия в результатах многоразмерного масштабирования при разных значениях random_state
могут быть следствием случайной инициализации и выбора локальных минимумов. Понимание методов и соответствующие настройки параметров позволят значительно улучшить достоверность ваших визуализаций. Исследуйте использование других техник, чтобы получить дополнительные перспективы и обеспечить надежные анализы ваших данных.
Это объяснение можно использовать как основу для дальнейшего изучения методов визуализации данных и оптимизации их представления.