Проблема с 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-граф в значительной степени неповрежденным).
Больше примеров
Эти примеры были подготовлены для презентации статьи (но пока не могут быть найдены в статье, как я сделал этот эксперимент позже)
Эрих Шуберт и Майкл Герц.
Внутреннее t-стохастическое вложение соседей для визуализации и обнаружения выбросов - средство против проклятия размерности?
В кн .: Материалы 10-й Международной конференции по поиску и применению сходства (SISAP), Мюнхен, Германия. 2017
Во-первых, у нас есть эти входные данные:
Как вы можете догадаться, это происходит от изображения "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 на результат! потому что результат будет сильно искажен, и ни расстояния, ни плотность не сохранятся хорошо. Вместо этого лучше использовать его для визуализации.