t-SNE
t-SNE (t-distributed Stochastic Neighbor Embedding, t-распределённое стохастическое вложение соседей) — это алгоритм машинного обучения, предназначенный для визуализации многомерных данных путём их проекции на двумерное или трёхмерное пространство. Относится к классу методов нелинейного уменьшения размерности (manifold learning) и широко применяется в анализе данных, биоинформатике, компьютерном зрении и обработке естественного языка для выявления скрытых структур и кластеров в сложных наборах данных.
История
Алгоритм t-SNE был предложен в 2008 году нидерландским учёным Лоренсом ван дер Маатеном (Laurens van der Maaten) и британским статистиком Джеффри Хинтоном (Geoffrey Hinton) как развитие более раннего метода SNE (Stochastic Neighbor Embedding), опубликованного Хинтоном и Сами Роуисом (Sam Roweis) в 2002 году. Основной целью разработки было преодоление ограничений SNE, связанных с трудностью оптимизации и эффектом «сжатия» точек в центре визуализации.
В 2014 году ван дер Маатен выпустил библиотеку для Python (scikit-learn), которая сделала t-SNE доступным для широкого круга исследователей. С тех пор алгоритм стал стандартным инструментом в разведочном анализе данных, особенно в областях, где многомерные данные (например, генетические профили или векторы слов) требуют интерпретации через визуализацию.
Принцип работы
Основная идея
t-SNE преобразует расстояния между точками в многомерном пространстве в вероятности, отражающие сходство. Затем алгоритм ищет такое расположение точек в низкоразмерном пространстве (обычно 2D или 3D), при котором распределение вероятностей сходства между точками в низкоразмерном пространстве максимально близко к распределению в исходном пространстве.
Математическая основа
- Вычисление сходства в исходном пространстве: Для каждой пары точек \(x_i\) и \(x_j\) в многомерном пространстве вычисляется условная вероятность \(p_{j|i}\), которая пропорциональна гауссову ядру от евклидова расстояния:
\[ p_{j|i} = \frac{\exp(-\|x_i - x_j\|^2 / 2\sigma_i^2)}{\sum_{k \neq i} \exp(-\|x_i - x_k\|^2 / 2\sigma_i^2)} \] Параметр \(\sigma_i\) (дисперсия гауссианы) подбирается для каждой точки индивидуально с помощью бинарного поиска, чтобы энтропия распределения \(P_i\) была равна заданному значению, определяемому гиперпараметром perplexity (запутанность).
- Симметризация: Симметричная вероятность сходства \(p_{ij}\) определяется как среднее арифметическое \(p_{j|i}\) и \(p_{i|j}\):
\[ p_{ij} = \frac{p_{j|i} + p_{i|j}}{2N} \] где \(N\) — количество точек. Это гарантирует, что \(p_{ij} = p_{ji}\) и \(\sum_{ij} p_{ij} = 1\).
- Вычисление сходства в низкоразмерном пространстве: Для точек \(y_i\) и \(y_j\) в низкоразмерном пространстве используется t-распределение Стьюдента с одной степенью свободы (распределение Коши) вместо гауссова ядра:
\[ q_{ij} = \frac{(1 + \|y_i - y_j\|^2)^{-1}}{\sum_{k \neq l} (1 + \|y_k - y_l\|^2)^{-1}} \] Выбор t-распределения решает проблему «сжатия»: его «тяжёлые хвосты» позволяют точкам, которые далеки в исходном пространстве, располагаться на умеренных расстояниях в низкоразмерном, не создавая артефактов.
- Минимизация расхождения: Алгоритм минимизирует расхождение Кульбака — Лейблера (KL-дивергенцию) между распределениями \(P\) и \(Q\) с помощью градиентного спуска:
\[ KL(P \| Q) = \sum_{i \neq j} p_{ij} \log \frac{p_{ij}}{q_{ij}} \] Градиент функции потерь имеет вид: \[ \frac{\partial KL}{\partial y_i} = 4 \sum_j (p_{ij} - q_{ij})(y_i - y_j)(1 + \|y_i - y_j\|^2)^{-1} \]
Гиперпараметры
- Perplexity (запутанность): Ключевой гиперпараметр, который можно интерпретировать как эффективное количество соседей для каждой точки. Обычно принимает значения от 5 до 50. Слишком низкое значение приводит к появлению ложных кластеров, слишком высокое — к сглаживанию структуры.
- Learning rate (скорость обучения): Влияет на скорость сходимости. Рекомендуемые значения — от 10 до 1000. Слишком низкая скорость может привести к застреванию в локальных минимумах, слишком высокая — к нестабильности.
- Number of iterations (количество итераций): Обычно 1000–5000. Алгоритм может требовать больше итераций для сложных наборов данных.
- Early exaggeration (раннее преувеличение): На начальных этапах (обычно первые 250 итераций) вероятности \(p_{ij}\) умножаются на коэффициент (например, 12), чтобы кластеры сильнее отталкивались друг от друга и лучше разделялись.
Преимущества и недостатки
Преимущества
- Сохранение локальной структуры: t-SNE отлично выявляет кластеры и локальные группировки точек, даже если они находятся в сложных нелинейных многообразиях.
- Визуальная интерпретируемость: Результаты обычно хорошо воспринимаются человеком — кластеры визуально разделены, а выбросы видны.
- Устойчивость к шуму: Алгоритм относительно устойчив к выбросам, так как t-распределение уменьшает влияние далёких точек.
Недостатки
- Несохранение глобальной структуры: Расстояния между кластерами в визуализации t-SNE не имеют прямого смысла — размеры и взаимное расположение кластеров могут быть искажены.
- Стохастичность: Результаты могут различаться при разных запусках из-за случайной инициализации и невыпуклости функции потерь.
- Вычислительная сложность: Классическая реализация имеет сложность \(O(N^2)\) по времени и памяти, что делает её неприменимой для наборов данных с десятками тысяч точек без оптимизаций (например, Barnes-Hut t-SNE с \(O(N \log N)\)).
- Чувствительность к гиперпараметрам: Неправильный выбор perplexity или learning rate может привести к артефактам (например, «галлюцинациям» кластеров).
- Неприменимость к новым данным: t-SNE не является моделью — он не может быть применён к новым точкам без перезапуска алгоритма на всём наборе данных.
Применение
Биоинформатика и геномика
t-SNE активно используется для визуализации данных одноклеточного секвенирования РНК (scRNA-seq), где каждая клетка описывается тысячами генов. Алгоритм помогает выявлять субпопуляции клеток, маркеры и редкие типы. Например, в проекте Human Cell Atlas t-SNE применяется для кластеризации клеток по их транскриптомным профилям.
Обработка естественного языка (NLP)
Векторные представления слов (word embeddings), такие как Word2Vec или GloVe, имеют размерность 100–300. t-SNE позволяет визуализировать семантические отношения между словами: синонимы, термины из одной предметной области или грамматические формы часто образуют компактные кластеры.
Компьютерное зрение
Признаки, извлечённые из глубоких нейронных сетей (например, из последнего полносвязного слоя), могут быть визуализированы с помощью t-SNE для анализа того, как сеть группирует изображения по классам или атрибутам. Это используется для диагностики переобучения и поиска ошибок в данных.
Финансовый анализ
t-SNE применяется для визуализации портфелей акций, выявления аномалий в транзакциях и кластеризации клиентов по поведенческим паттернам. Однако из-за чувствительности к шуму в финансовых данных требуется тщательная предобработка.
Альтернативы и сравнение
PCA (Principal Component Analysis)
PCA — линейный метод, который сохраняет глобальную дисперсию, но плохо работает с нелинейными структурами. t-SNE, напротив, превосходно выявляет локальные кластеры, но искажает глобальную геометрию. На практике часто сначала применяют PCA для уменьшения размерности до 30–50 компонент (чтобы снизить шум и ускорить t-SNE), а затем — t-SNE.
UMAP (Uniform Manifold Approximation and Projection)
UMAP (2018) — более современный метод, который сочетает сохранение локальной структуры (как t-SNE) с лучшим сохранением глобальной топологии. UMAP быстрее, масштабируется на большие наборы данных (до миллионов точек) и менее чувствителен к гиперпараметрам. Однако t-SNE остаётся более популярным для малых и средних наборов данных благодаря своей интерпретируемости и обширной документации.
t-SNE vs. MDS (Multidimensional Scaling)
MDS (многомерное шкалирование) стремится сохранить все попарные расстояния, что делает его подходящим для глобальных структур, но неэффективным для выявления кластеров в нелинейных многообразиях. t-SNE значительно превосходит MDS в задачах визуализации кластеров.
Реализации
Наиболее популярная реализация t-SNE доступна в библиотеке scikit-learn для Python (sklearn.manifold.TSNE). Другие реализации включают:
openTSNE— оптимизированная версия с поддержкой многопоточности и улучшенной инициализацией.Rtsne— пакет для языка R.tensorflowиPyTorch— реализации для интеграции в нейросетевые пайплайны.Barnes-Hut t-SNE— версия с пониженной вычислительной сложностью, реализованная вscikit-learn(параметрmethod='barnes_hut').
Источники
- Van der Maaten, L., & Hinton, G. (2008). Visualizing Data using t-SNE. Journal of Machine Learning Research, 9, 2579–2605.
- Van der Maaten, L. (2014). Accelerating t-SNE using Tree-Based Algorithms. Journal of Machine Learning Research, 15, 3221–3245.
- Hinton, G., & Roweis, S. (2002). Stochastic Neighbor Embedding. Advances in Neural Information Processing Systems, 15.
- McInnes, L., Healy, J., & Melville, J. (2018). UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction. arXiv:1802.03426.
- Документация библиотеки scikit-learn: sklearn.manifold.TSNE.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →