В настоящее время я изучаю визуализацию многомерных данных с использованием t-SNE. У меня есть некоторые данные со смешанными двоичными и непрерывными переменными, и данные, похоже, слишком быстро группируют двоичные данные. Конечно, это ожидается для масштабированных (между 0 и 1) данных: евклидово расстояние всегда будет наибольшим / наименьшим между двоичными переменными. Как следует работать со смешанными двоичными / непрерывными наборами данных, используя t-SNE? Должны ли мы отбросить двоичные столбцы? Это там другое metric
мы можем использовать?
В качестве примера рассмотрим этот код Python:
x1 = np.random.rand(200)
x2 = np.random.rand(200)
x3 = np.r_[np.ones(100), np.zeros(100)]
X = np.c_[x1, x2, x3]
# plot of the original data
plt.scatter(x1, x2, c=x3)
# … format graph
поэтому мои необработанные данные:
где цвет - это значение третьего признака (x3) - в 3D точки данных лежат в двух плоскостях (x3 = 0 плоскость и x3 = 1 плоскость).
Затем я выполняю t-SNE:
tsne = TSNE() # sci-kit learn implementation
X_transformed = StandardScaler().fit_transform(X)
tsne = TSNE(n_components=2, perplexity=5)
X_embedded = tsne.fit_transform(X_transformed)
с полученным сюжетом:
и данные, конечно, сгруппированы по х3. Мой инстинкт инстинкта заключается в том, что, поскольку метрика расстояния не очень хорошо определена для двоичных объектов, мы должны отбросить их перед выполнением любого t-SNE, что было бы позором, поскольку эти функции могут содержать полезную информацию для генерации кластеров.
Ответы:
Отказ от ответственности: у меня есть только косвенные знания по этой теме, но, поскольку никто не ответил, я попробую
Расстояние важно
Любой метод уменьшения размерности, основанный на расстояниях (tSNE, UMAP, MDS, PCoA и, возможно, другие), эффективен только в качестве метрики расстояния, которую вы используете. Как правильно указывает @amoeba, не может быть единого решения для всех, вам нужно иметь метрику расстояния, которая отражает то, что вы считаете важными в данных, то есть строки, которые вы считаете одинаковыми, имеют небольшое расстояние и строки, которые вы бы хотели Считать разные имеют большое расстояние.
Как выбрать хороший показатель расстояния? Во-первых, позвольте мне немного отвлечься:
рукоположение
Задолго до славных дней современного машинного обучения общественные экологи (и, скорее всего, другие) пытались составить хорошие графики для исследовательского анализа многомерных данных. Они называют порядок процессов, и это полезное ключевое слово для поиска в литературе по экологии, начиная с 70-х годов прошлого столетия и по-прежнему становясь сильным сегодня.
Важно то, что экологи имеют очень разнообразные наборы данных и имеют дело со смесью бинарных, целочисленных и вещественных признаков (например, наличие / отсутствие видов, количество наблюдаемых образцов, pH, температура). Они потратили много времени на размышления о расстояниях и преобразованиях, чтобы хорошо выполнять рукоположение. Я не очень хорошо разбираюсь в этой области, но, например, обзор разнообразия Legendre и De Cáceres Beta как дисперсии данных сообщества: различия в коэффициентах и разделениях показывают огромное количество возможных расстояний, которые вы, возможно, захотите проверить.
Многомерное масштабирование
Основным инструментом для определения местоположения является многомерное масштабирование (MDS), особенно неметрический вариант (NMDS), который я рекомендую вам попробовать в дополнение к t-SNE. Я не знаю о мире Python, но реализация R в
metaMDS
функцииvegan
пакета делает много трюков для вас (например, выполнение нескольких запусков до тех пор, пока не найдет два похожих).Это оспаривается, см. Комментарии . Приятной особенностью MDS является то, что он также проецирует элементы (столбцы), чтобы вы могли видеть, какие функции влияют на уменьшение размерности. Это поможет вам интерпретировать ваши данные.
Имейте в виду, что t-SNE был подвергнут критике как инструмент для получения понимания, см., Например, это исследование его подводных камней - я слышал, что UMAP решает некоторые из проблем, но у меня нет опыта работы с UMAP. Я также не сомневаюсь, что одной из причин, по которой экологи используют NMDS, является культура и инерция, возможно, UMAP или t-SNE на самом деле лучше. Я, честно говоря, не знаю.
Выкатывая свое расстояние
Если вы понимаете структуру ваших данных, готовые расстояния и преобразования могут оказаться не самыми подходящими для вас, и вы можете захотеть построить собственную метрику расстояния. Хотя я не знаю, что представляют ваши данные, было бы разумно рассчитать расстояние отдельно для вещественных переменных (например, используя евклидово расстояние, если это имеет смысл) и для двоичных переменных и добавить их. Обычными расстояниями для двоичных данных являются, например, расстояние Жакара или расстояние Косинуса . Возможно, вам придется подумать о некотором мультипликативном коэффициенте для расстояний, поскольку у Джакарда и Косинуса оба значения в независимо от количества объектов, в то время как величина евклидова расстояния отражает количество объектов.[0,1]
Слово предостережения
Все время вам следует помнить, что, поскольку у вас так много регуляторов для настройки, вы можете легко попасть в ловушку настройки, пока не увидите то, что хотели увидеть. Этого трудно полностью избежать при предварительном анализе, но вы должны быть осторожны.
источник
metaMDS
графиков, как образцов, так и функций (см., например, эту виньетку: cran.r-project.org/web/packages/vegan/vignettes/ intro-vegan.pdf )vegan
пакет делает там, но MDS / NMDS - это нелинейный и непараметрический метод (точно так же, как у t-SNE), и не существует «внутреннего» способа сопоставления исходных функций с размерами MDS. Я могу представить, что они вычисляют корреляции между оригинальными функциями и измерениями MDS; если это так, это может быть сделано для любого встраивания, включая t-SNE. Было бы интересно узнать, что именноvegan
делает.