У меня есть приложение, в котором было бы удобно кластеризовать зашумленный набор данных, прежде чем искать эффекты подгрупп в кластерах. Сначала я посмотрел на PCA, но для достижения 90% изменчивости требуется ~ 30 компонентов, поэтому кластеризация на нескольких компьютерах приведет к выбросу большого количества информации.
Затем я попробовал t-SNE (впервые), который дает мне странную форму в двух измерениях, которая очень поддается кластеризации с помощью k-средних. Более того, запуск случайного леса на данных с назначением кластера в качестве результата показывает, что кластеры имеют достаточно разумную интерпретацию с учетом контекста проблемы, с точки зрения переменных, составляющих необработанные данные.
Но если я собираюсь сообщить об этих кластерах, как мне их описать? Кластеры K-средних на главных компонентах показывают людей, которые находятся рядом друг с другом с точки зрения производных переменных, которые составляют X% дисперсии в наборе данных. Какое эквивалентное утверждение можно сделать о кластерах t-SNE?
Возможно что-то с эффектом:
t-SNE показывает приблизительную смежность в лежащем в основе многомерном многообразии, поэтому кластеры на низкоразмерном представлении многомерного пространства максимизируют «вероятность» того, что смежные лица не будут находиться в одном кластере
Кто-нибудь может предложить лучшую рекламу, чем это?
источник
Ответы:
Проблема с t-SNE состоит в том, что он не сохраняет ни расстояния, ни плотность. Это только в некоторой степени сохраняет ближайших соседей. Разница невелика, но влияет на любой алгоритм на основе плотности или расстояния.
Чтобы увидеть этот эффект, просто сгенерируйте многомерное распределение Гаусса. Если вы визуализируете это, у вас будет шарик, который является плотным и становится намного менее плотным наружу, с некоторыми выбросами, которые могут быть действительно далеко.
Теперь запустите t-SNE на этих данных. Вы обычно получите круг довольно однородной плотности. Если вы используете низкое недоумение, там могут быть даже странные паттерны. Но вы не можете больше различать выбросы.
Теперь давайте все усложним. Давайте использовать 250 точек в нормальном распределении в (-2,0) и 750 точек в нормальном распределении в (+2,0).
Предполагается, что это будет простой набор данных, например, с EM:
Если мы запустим t-SNE с недоумением по умолчанию 40, мы получим шаблон странной формы:
Не плохо, но и не так просто кластеризовать, не так ли? Вам будет сложно найти алгоритм кластеризации, который работает здесь именно так, как вам нужно. И даже если вы попросите людей сгруппировать эти данные, скорее всего, они найдут здесь более двух кластеров.
Если мы запустим t-SNE со слишком малым недоумением, таким как 20, мы получим больше таких шаблонов, которых не существует:
Это будет кластеризовать, например, с DBSCAN, но это даст четыре кластера. Так что будьте осторожны, t-SNE может создавать «поддельные» шаблоны!
Оптимальная путаница, кажется, где-то около 80 для этого набора данных; но я не думаю, что этот параметр должен работать для любого другого набора данных.
Теперь это визуально приятно, но не лучше для анализа . Человеческий аннотатор, вероятно, мог бы выбрать разрез и получить приличный результат; К-значит, однако, потерпит неудачу даже в этом очень простом сценарии ! Вы уже можете видеть, что информация о плотности теряется , все данные, кажется, живут в области почти одинаковой плотности. Если бы мы вместо этого еще больше увеличили недоумение, однородность увеличилась бы, и разделение снова уменьшилось бы.
В заключение, используйте t-SNE для визуализации (и попробуйте разные параметры, чтобы получить что-то визуально приятное!), Но не запускайте кластеризацию впоследствии , в частности, не используйте алгоритмы на основе расстояния или плотности, поскольку эта информация была намеренно (!) потерянный. Подходы, основанные на графе соседства, могут быть хорошими, но тогда вам не нужно сначала запускать t-SNE заранее, просто используйте соседей немедленно (потому что t-SNE пытается сохранить этот nn-граф в значительной степени неповрежденным).
Больше примеров
Эти примеры были подготовлены для презентации статьи (но пока не могут быть найдены в статье, как я сделал этот эксперимент позже)
Во-первых, у нас есть эти входные данные:
Как вы можете догадаться, это происходит от изображения "color me" для детей.
Если мы запустим это через SNE ( не t-SNE , а предшественник):
Вау, наша рыба стала настоящим морским чудовищем! Поскольку размер ядра выбирается локально, мы теряем большую часть информации о плотности.
Но вы будете действительно удивлены выходом t-SNE:
На самом деле я попробовал две реализации (ELKI и sklearn), и обе дали такой результат. Некоторые фрагменты отключены, но каждый из них выглядит несколько в соответствии с исходными данными.
Два важных момента, чтобы объяснить это:
SGD опирается на итеративную процедуру уточнения и может застрять в локальных оптимумах. В частности, это затрудняет алгоритм «переворачивает» часть данных, которые он отразил, так как это потребует перемещения точек через другие, которые должны быть отдельными. Поэтому, если некоторые части рыбы зеркально отражены, а другие части не зеркально отражены, возможно, это не удастся исправить.
t-SNE использует t-распределение в проецируемом пространстве. В отличие от гауссовского распределения, используемого обычным SNE, это означает, что большинство точек будут отталкивать друг друга , потому что они имеют 0 сродство во входной области (гауссово быстро получает ноль), но> 0 сродство в выходной области. Иногда (как в MNIST) это делает визуализацию лучше. В частности, это может помочь «разделить» набор данных немного больше, чем во входной области. Это дополнительное отталкивание также часто вызывает очки для более равномерного использования области, что также может быть желательным. Но здесь, в этом примере, отталкивающие эффекты фактически приводят к разделению фрагментов рыбы.
Мы можем помочь (на этом игрушечном наборе данных) в первой проблеме, используя исходные координаты в качестве исходного положения, а не случайные координаты (как обычно используется с t-SNE). На этот раз изображение sklearn вместо ELKI, потому что версия sklearn уже имела параметр для передачи начальных координат:
Как вы можете видеть, даже при «идеальном» начальном размещении t-SNE «сломает» рыбу в ряде мест, которые были изначально связаны, потому что отталкивание Student-t в выходной области сильнее, чем сродство Гаусса на входе пространство.
Как вы можете видеть, t-SNE (и SNE тоже!) - интересные методы визуализации , но с ними нужно обращаться осторожно. Я бы предпочел не применять k-means на результат! потому что результат будет сильно искажен, и ни расстояния, ни плотность не сохранятся хорошо. Вместо этого лучше использовать его для визуализации.
источник
Я хотел бы высказать несколько несогласное мнение с хорошо аргументированным (+1) и высоко голосуемым ответом @ErichSchubert. Эрих не рекомендует кластеризацию на выходе t-SNE и показывает несколько игрушечных примеров, где это может вводить в заблуждение. Он предлагает вместо этого применить кластеризацию к исходным данным.
Я хорошо знаю, каким образом вывод t-SNE может вводить в заблуждение (см. Https://distill.pub/2016/misread-tsne/ ), и я согласен, что в некоторых ситуациях он может давать странные результаты.
Но давайте рассмотрим некоторые реальные многомерные данные.
Возьмите данные MNIST : 70000 однозначных изображений. Мы знаем, что в данных 10 классов. Эти классы кажутся хорошо разделенными для человеческого наблюдателя. Однако кластеризация данных MNIST в 10 кластеров является очень сложной проблемой. Я не знаю ни одного алгоритма кластеризации, который бы правильно группировал данные в 10 кластеров; что еще более важно, я не знаю никакой эвристики кластеризации, которая указала бы, что в данных есть 10 (не больше и не меньше) кластеров. Я уверен, что наиболее распространенные подходы не смогут это указать.
Но давайте вместо этого сделаем t-SNE. (Можно найти много цифр t-SNE, примененных к MNIST онлайн, но они часто неоптимальны. По моему опыту, для достижения хороших результатов необходимо довольно рано выполнять преувеличение в течение некоторого времени. Ниже я использую
perplexity=50, max_iter=2000, early_exag_coeff=12, stop_lying_iter=1000
). Вот то, что я получаю, слева без метки, а справа окрашено в соответствии с основной истиной:Я бы сказал, что немаркированное представление t-SNE действительно предлагает 10 кластеров. Применение хорошего алгоритма кластеризации на основе плотности, такого как HDBSCAN с тщательно подобранными параметрами, позволит сгруппировать эти 2D данные в 10 кластеров.
В случае, если кто-то усомнится в том, что левый график выше действительно предлагает 10 кластеров, вот что я получаю с помощью трюка с «поздним преувеличением», где я дополнительно запускаю
max_iter=200
итерацииexaggeration=4
(этот трюк предлагается в этой замечательной статье: https://arxiv.org /abs/1712.09005 ):Теперь должно быть совершенно очевидно, что существует 10 кластеров.
Я призываю всех, кто думает, что кластеризация после t-SNE - плохая идея, показать алгоритм кластеризации, который достиг бы сравнительно хорошего результата.
А теперь еще больше реальных данных.
В случае MNIST мы знаем основную правду. Рассмотрим теперь некоторые данные с неизвестной наземной правдой. Кластеризация и t-SNE обычно используются для описания вариабельности клеток в данных одноклеточной RNA-seq. Например, Shekhar et al. В 2016 г. была предпринята попытка идентифицировать кластеры среди 27000 клеток сетчатки (в геноме мыши имеется около 20 тыс. Генов, поэтому размерность данных в принципе составляет около 20 тыс., Однако обычно начинается с уменьшения размерности с помощью PCA до 50 или около того). Они выполняют t-SNE и по отдельности выполняют кластеризацию (сложный конвейер кластеризации, за которым следуют некоторые объединения кластеров и т. Д.). Конечный результат выглядит приятным:
Причина, по которой он выглядит таким приятным, заключается в том, что t-SNE создает четко различимые кластеры, а алгоритм кластеризации дает абсолютно одинаковые кластеры. Приятно.
Однако, если вы посмотрите в дополнениях, то увидите, что авторы испробовали много разных подходов к кластеризации. Многие из них выглядят ужасно на графике t-SNE, потому что, например, большой центральный кластер разделен на множество подкластеров:
Так во что вы верите: вывод вашего любимого алгоритма кластеризации вместе с вашей любимой эвристикой для определения количества кластеров или что вы видите на графике t-SNE? Если честно, несмотря на все недостатки t-SNE, я склонен верить в t-SNE больше. Во всяком случае, я не понимаю, почему я должен в это верить меньше .
источник
Я думаю, что с большим недоумением t-SNE может реконструировать глобальную топологию, как указано в https://distill.pub/2016/misread-tsne/ .
Из изображения рыбы я отобрал 4000 точек для t-SNE. С большим недоумением (2000), изображение рыбы было практически реконструировано.
Вот оригинальное изображение.
Вот изображение, реконструированное с помощью t-SNE с недоумением = 2000.
источник
Основываясь на имеющихся у нас математических данных, этот метод технически может сохранить расстояния! почему вы все игнорируете эту функцию! t -SNE - это преобразование евклидовых расстояний большой размерности между выборками в условные вероятности, которые представляют сходства. Я пробовал t- -SNE с более чем 11 000 образцов (в контексте геномики) параллельно с различными согласованными алгоритмами кластеризации, включая спектральную кластеризацию, сродство и, что важно, с кластеризацией GMM (которая является алгоритмом кластеризации на основе плотности!). В результате я нашел очень хороший согласованный результат между двумя подходами ( т-SNE против согласованных алгоритмов кластеризации). Я полагаю, что интеграция t-SNE с согласованными алгоритмами кластеризации могла бы обеспечить лучшее подтверждение существующих локальных и глобальных структур данных.
источник
Вы можете попробовать алгоритм кластеризации DBSCAN. Кроме того, недоумение tsne должно быть примерно такого же размера, как наименьший ожидаемый кластер.
источник
Лично я испытал это однажды, но не с t-SNE или PCA. Мои исходные данные находятся в 15-мерном пространстве. Используя UMAP, чтобы сократить его до 2D и 3D вложений, я получил 2 отлично и визуально разделимых кластера на 2D и 3D графиках. Слишком хорошо, чтобы быть правдой. Но когда я «посмотрел» на исходные данные из диаграммы постоянства, я понял, что есть гораздо более «значимые» кластеры, а не только 2.
Кластеризация выходных данных метода уменьшения размеров должна выполняться с большой осторожностью, в противном случае любая интерпретация может быть очень вводящей в заблуждение или ошибочной, поскольку уменьшение размера обязательно приведет к потере характеристик (возможно, с шумом или с истинными характеристиками, но априори мы не не знаю, какой). На мой взгляд, вы можете доверять / интерпретировать кластеры, если:
Кластеры в проецируемых данных соответствуют / подтверждают некоторую классификацию, определенную априори (представьте себе набор данных MNIST, где кластеры проецируемых данных очень хорошо соответствуют классификации цифр), и / или,
Вы можете подтвердить наличие этих кластеров в исходных данных, используя другие методы, такие как диаграммы постоянства. Подсчет только количества подключенных компонентов может быть выполнен за довольно разумное время.
источник