Алгоритм t-SNE: визуализация многомерных данных на плоскости

Когда данные описываются десятками или сотнями признаков, увидеть их структуру глазами невозможно: человек уверенно мыслит в двух-трёх измерениях, а не в пятидесяти. t-SNE (t-distributed Stochastic Neighbor Embedding) решает именно эту задачу - он переносит точки из многомерного пространства на плоскость так, чтобы похожие объекты остались рядом, а непохожие разошлись. Результат - карта, на которой кластеры данных видны невооружённым глазом. Ниже разберём, как алгоритм устроен изнутри, за что отвечает параметр перплексии и какие ловушки подстерегают при чтении полученной картинки. Параметры под свою задачу удобно подобрать в форме чуть ниже.
Зачем нужно снижение размерности
Многомерные данные - норма в машинном обучении: эмбеддинги слов, вектора признаков изображений, экспрессия генов. У каждого объекта могут быть сотни координат. Напрямую построить такую структуру нельзя, а интуиция о расстояниях в высоких размерностях ломается: из-за «проклятия размерности» почти все точки оказываются примерно одинаково далеки друг от друга.
Снижение размерности сжимает данные до двух-трёх координат, сохраняя главное - соседство. Линейные методы вроде метода главных компонент (PCA) ищут направления максимальной дисперсии и хорошо передают глобальную геометрию, но плохо разделяют нелинейно перепутанные кластеры. t-SNE - нелинейный метод, и его цель иная: не сохранить общую форму облака, а аккуратно развести локальные группы соседей.

Идея t-SNE: сохранить соседство, а не расстояния
Ключевая мысль алгоритма - работать не с самими расстояниями, а с вероятностями соседства. Для каждой пары точек в исходном пространстве вычисляется вероятность того, что одна выбрала бы другую в соседи. Близкие точки получают высокую вероятность, далёкие - почти нулевую.
В многомерном пространстве это вероятность , построенная на гауссовом ядре вокруг каждой точки:
На плоскости для тех же точек строится своё распределение вероятностей . Задача алгоритма - расположить точки на карте так, чтобы было максимально похоже на . Мерой различия двух распределений служит дивергенция Кульбака-Лейблера:
Эту функцию стоимости алгоритм минимизирует градиентным спуском, итеративно сдвигая точки на плоскости. Похожие объекты притягиваются, разнородные отталкиваются - пока карта не стабилизируется.
Почему именно t-распределение
В названии метода буква «t» неслучайна. Ранний предшественник, SNE, для распределения на плоскости использовал тоже гауссиану - и страдал от «проблемы скученности»: места на плоскости не хватало, умеренно далёкие точки слипались в плотный ком.
Решение - заменить нормальное распределение на низкой размерности распределением Стьюдента (t-распределение) с одной степенью свободы:
У t-распределения «тяжёлые хвосты»: оно медленнее убывает на больших расстояниях. Благодаря этому умеренно удалённым точкам разрешается разъехаться дальше, кластеры получают воздух и чётче отделяются друг от друга. Именно тяжёлые хвосты делают картинки t-SNE такими наглядными.

Перплексия: главный параметр настройки
Перплексия - самый важный гиперпараметр t-SNE. Грубо говоря, это ожидаемое число ближайших соседей, которое алгоритм учитывает для каждой точки. Через перплексию подбирается ширина гауссова ядра: алгоритм решает уравнение так, чтобы эффективное число соседей совпало с заданным.
Связь задаётся через энтропию Шеннона распределения соседей :
Что меняет перплексия на практике:
- Малая (5-10) - алгоритм смотрит на узкий круг соседей, выделяет мелкие локальные группы, но может дробить единые кластеры и шуметь.
- Средняя (30-50) - рабочий диапазон по умолчанию, баланс между локальной и глобальной структурой.
- Большая (близко к числу точек) - учитывается слишком широкий контекст, картинка размывается, кластеры сливаются.
Авторы метода рекомендуют значения от 5 до 50 и подбор под размер выборки: перплексия не должна превышать число объектов. Всегда полезно построить несколько карт с разной перплексией и сравнить.
Как работает алгоритм по шагам
На практике t-SNE проходит несколько чётких этапов, и понимание их порядка помогает осмысленно настраивать метод:
- Расчёт вероятностей соседства в исходном пространстве. Для каждой точки подбирается ширина гауссова ядра так, чтобы эффективное число соседей совпало с заданной перплексией. Получаются вероятности .
- Случайная инициализация на плоскости. Точки разбрасываются в двумерном пространстве - обычно из малой гауссовой окрестности нуля или из результата PCA для устойчивости.
- Минимизация дивергенции. Градиентным спуском с моментом точки сдвигаются: похожие притягиваются, разнородные отталкиваются. Применяется приём «раннего преувеличения» (early exaggeration) - на первых итерациях вероятности искусственно увеличивают, чтобы кластеры быстрее обособились и оставили между собой пространство.
- Сходимость. После сотен итераций карта стабилизируется: расположение точек перестаёт заметно меняться, и видны устойчивые группы.
Скорость алгоритма - отдельная тема. Наивная реализация квадратична по числу точек: на больших выборках это неприемлемо. Поэтому используют ускорение методом Барнса-Хата, которое сводит сложность к , группируя далёкие точки и приближённо считая их вклад. Для очень крупных датасетов есть ещё более быстрые варианты, но логика везде одна: точное взаимодействие близких соседей и приближённое - далёких.
Как читать карту t-SNE без ложных выводов
Картинка t-SNE наглядна, но обманчива - несколько вещей нельзя интерпретировать буквально:
- Размеры кластеров на карте ничего не значат. t-SNE расширяет плотные группы и сжимает разреженные, поэтому площадь пятна не отражает реального разброса данных.
- Расстояния между кластерами не сохраняются. То, что две группы на карте далеко, не означает, что в исходном пространстве они дальше, чем соседние пятна. Глобальная геометрия искажается.
- Случайные «комки» при большой перплексии - артефакт. На равномерном шуме t-SNE может нарисовать ложную структуру; всегда проверяйте устойчивость при разных запусках.
Главное правило: t-SNE надёжно показывает наличие и состав локальных групп, но не их взаимное расположение и масштаб. Если нужна глобальная структура и расстояния, разумно дополнить картину родственным методом UMAP или линейным PCA.
Частые ошибки
- Один запуск с дефолтной перплексией. Карта зависит от случайной инициализации и параметров; делайте несколько прогонов и сравнивайте.
- Чтение расстояний между кластерами как смысловых. Межкластерные дистанции в t-SNE не метрика - выводы «класс A ближе к B, чем к C» по карте недопустимы.
- Слишком много точек без предобработки. На десятках тысяч объектов t-SNE медленный; сначала снизьте размерность через PCA до 30-50 компонент, затем подавайте в t-SNE.
- Ранняя остановка оптимизации. Если итераций мало, кластеры не успевают разойтись и слипаются в ком - увеличьте число шагов градиентного спуска.
- Перплексия больше числа точек. Алгоритм теряет смысл: эффективное число соседей не может превышать размер выборки.
FAQ
Чем t-SNE отличается от PCA? PCA - линейный метод, который сохраняет направления максимальной дисперсии и глобальную геометрию, но плохо разделяет нелинейные кластеры. t-SNE - нелинейный, он жертвует глобальной структурой ради чёткого разделения локальных групп соседей. На практике их часто комбинируют: сперва PCA для грубого сжатия, затем t-SNE для визуализации.
Можно ли по карте t-SNE делать выводы о расстояниях между группами? Нет. t-SNE сохраняет только локальное соседство. Размеры кластеров и расстояния между ними на карте не отражают реальных величин в исходном пространстве, поэтому межгрупповые дистанции интерпретировать нельзя.
Какую перплексию выбрать? Начните с диапазона 30-50, для маленьких выборок берите меньше (5-15). Перплексия не должна превышать число точек. Лучший подход - построить несколько карт с разными значениями и выбрать ту, где структура устойчива.
Коротко
t-SNE - нелинейный метод визуализации, который переносит многомерные данные на плоскость, сохраняя соседство точек через вероятности и минимизируя дивергенцию Кульбака-Лейблера градиентным спуском. Тяжёлые хвосты t-распределения разводят кластеры, а перплексия задаёт масштаб локальности. Карту читают осторожно: она показывает наличие групп, но не их размеры и взаимные расстояния.
Читайте также

Алгоритм UMAP: как работает снижение размерности
Алгоритм UMAP простыми словами: как метод строит граф ближайших соседей, оптимизирует низкоразмерное вложение, чем отличается от t-SNE и как подобрать n_neighbors и min_dist для визуализации данных.

Автоэнкодер (autoencoder): как сеть сжимает данные
Автоэнкодер (autoencoder) простыми словами: энкодер, латентное пространство и декодер, функция потерь реконструкции, виды сетей и где их применяют для сжатия и поиска аномалий.

Метод главных компонент (PCA): как работает и формулы
Метод главных компонент простыми словами: что такое PCA, как из ковариационной матрицы получить собственные значения и векторы, как считать долю объяснённой дисперсии и выбрать число компонент.