EssayAI
Блог
Блог
Математика и алгоритмы

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

20 июня 2026Время чтения: 7 минут
#t-SNE#снижение размерности#визуализация данных#перплексия#кластеризация
Алгоритм t-SNE: визуализация многомерных данных на плоскости

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

Зачем нужно снижение размерности

Многомерные данные - норма в машинном обучении: эмбеддинги слов, вектора признаков изображений, экспрессия генов. У каждого объекта могут быть сотни координат. Напрямую построить такую структуру нельзя, а интуиция о расстояниях в высоких размерностях ломается: из-за «проклятия размерности» почти все точки оказываются примерно одинаково далеки друг от друга.

Снижение размерности сжимает данные до двух-трёх координат, сохраняя главное - соседство. Линейные методы вроде метода главных компонент (PCA) ищут направления максимальной дисперсии и хорошо передают глобальную геометрию, но плохо разделяют нелинейно перепутанные кластеры. t-SNE - нелинейный метод, и его цель иная: не сохранить общую форму облака, а аккуратно развести локальные группы соседей.

Схема снижения размерности: облако точек в многомерном пространстве проецируется в двумерную карту кластеров
Схема снижения размерности: облако точек в многомерном пространстве проецируется в двумерную карту кластеров

Идея t-SNE: сохранить соседство, а не расстояния

Ключевая мысль алгоритма - работать не с самими расстояниями, а с вероятностями соседства. Для каждой пары точек в исходном пространстве вычисляется вероятность того, что одна выбрала бы другую в соседи. Близкие точки получают высокую вероятность, далёкие - почти нулевую.

В многомерном пространстве это вероятность pijp_{ij}, построенная на гауссовом ядре вокруг каждой точки:

pji=exp(xixj2/2σi2)kiexp(xixk2/2σi2)p_{j|i} = \frac{\exp(-\lVert x_i - x_j \rVert^2 / 2\sigma_i^2)}{\sum_{k \neq i} \exp(-\lVert x_i - x_k \rVert^2 / 2\sigma_i^2)}

На плоскости для тех же точек строится своё распределение вероятностей qijq_{ij}. Задача алгоритма - расположить точки на карте так, чтобы qijq_{ij} было максимально похоже на pijp_{ij}. Мерой различия двух распределений служит дивергенция Кульбака-Лейблера:

C=ijpijlogpijqijC = \sum_{i \neq j} p_{ij} \log \frac{p_{ij}}{q_{ij}}

Эту функцию стоимости алгоритм минимизирует градиентным спуском, итеративно сдвигая точки на плоскости. Похожие объекты притягиваются, разнородные отталкиваются - пока карта не стабилизируется.

Почему именно t-распределение

В названии метода буква «t» неслучайна. Ранний предшественник, SNE, для распределения qijq_{ij} на плоскости использовал тоже гауссиану - и страдал от «проблемы скученности»: места на плоскости не хватало, умеренно далёкие точки слипались в плотный ком.

Решение - заменить нормальное распределение на низкой размерности распределением Стьюдента (t-распределение) с одной степенью свободы:

qij=(1+yiyj2)1kl(1+ykyl2)1q_{ij} = \frac{(1 + \lVert y_i - y_j \rVert^2)^{-1}}{\sum_{k \neq l} (1 + \lVert y_k - y_l \rVert^2)^{-1}}

У t-распределения «тяжёлые хвосты»: оно медленнее убывает на больших расстояниях. Благодаря этому умеренно удалённым точкам разрешается разъехаться дальше, кластеры получают воздух и чётче отделяются друг от друга. Именно тяжёлые хвосты делают картинки t-SNE такими наглядными.

Сравнение нормального распределения и t-распределения с тяжёлыми хвостами, которые дают кластерам пространство
Сравнение нормального распределения и t-распределения с тяжёлыми хвостами, которые дают кластерам пространство

Перплексия: главный параметр настройки

Перплексия - самый важный гиперпараметр t-SNE. Грубо говоря, это ожидаемое число ближайших соседей, которое алгоритм учитывает для каждой точки. Через перплексию подбирается ширина σi\sigma_i гауссова ядра: алгоритм решает уравнение так, чтобы эффективное число соседей совпало с заданным.

Связь задаётся через энтропию Шеннона распределения соседей H(Pi)H(P_i):

Perp(Pi)=2H(Pi),H(Pi)=jpjilog2pji\text{Perp}(P_i) = 2^{H(P_i)}, \qquad H(P_i) = -\sum_j p_{j|i} \log_2 p_{j|i}

Что меняет перплексия на практике:

  • Малая (5-10) - алгоритм смотрит на узкий круг соседей, выделяет мелкие локальные группы, но может дробить единые кластеры и шуметь.
  • Средняя (30-50) - рабочий диапазон по умолчанию, баланс между локальной и глобальной структурой.
  • Большая (близко к числу точек) - учитывается слишком широкий контекст, картинка размывается, кластеры сливаются.

Авторы метода рекомендуют значения от 5 до 50 и подбор под размер выборки: перплексия не должна превышать число объектов. Всегда полезно построить несколько карт с разной перплексией и сравнить.

Как работает алгоритм по шагам

На практике t-SNE проходит несколько чётких этапов, и понимание их порядка помогает осмысленно настраивать метод:

  1. Расчёт вероятностей соседства в исходном пространстве. Для каждой точки подбирается ширина гауссова ядра σi\sigma_i так, чтобы эффективное число соседей совпало с заданной перплексией. Получаются вероятности pijp_{ij}.
  2. Случайная инициализация на плоскости. Точки разбрасываются в двумерном пространстве - обычно из малой гауссовой окрестности нуля или из результата PCA для устойчивости.
  3. Минимизация дивергенции. Градиентным спуском с моментом точки сдвигаются: похожие притягиваются, разнородные отталкиваются. Применяется приём «раннего преувеличения» (early exaggeration) - на первых итерациях вероятности pijp_{ij} искусственно увеличивают, чтобы кластеры быстрее обособились и оставили между собой пространство.
  4. Сходимость. После сотен итераций карта стабилизируется: расположение точек перестаёт заметно меняться, и видны устойчивые группы.

Скорость алгоритма - отдельная тема. Наивная реализация квадратична по числу точек: на больших выборках это неприемлемо. Поэтому используют ускорение методом Барнса-Хата, которое сводит сложность к O(NlogN)O(N \log N), группируя далёкие точки и приближённо считая их вклад. Для очень крупных датасетов есть ещё более быстрые варианты, но логика везде одна: точное взаимодействие близких соседей и приближённое - далёких.

Как читать карту 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-распределения разводят кластеры, а перплексия задаёт масштаб локальности. Карту читают осторожно: она показывает наличие групп, но не их размеры и взаимные расстояния.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также