← Назад к вопросам

Что такое t-SNE и UMAP?

2.0 Middle🔥 171 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое t-SNE и UMAP?

t-SNE и UMAP — это методы снижения размерности данных, которые сохраняют локальную структуру данных. Они используются для визуализации высокомерных данных в 2D или 3D пространстве. Давайте разберём подробно.

t-SNE (t-Distributed Stochastic Neighbor Embedding)

t-SNE — это алгоритм нелинейного снижения размерности, разработанный Лоуренсом ван дер Маатеном и Джеффри Хинтоном в 2008 году. Основная идея: найти представление данных в низкомерном пространстве так, чтобы близкие точки в исходном пространстве оставались близкими, а далёкие — далёкими.

Принцип работы t-SNE

import numpy as np
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt

# Пример: визуализация датасета MNIST
from sklearn.datasets import load_digits

digits = load_digits()
X = digits.data  # 1797 samples, 64 features
y = digits.target

# Применяем t-SNE: снижаем размерность с 64D до 2D
tsne = TSNE(n_components=2, perplexity=30, n_iter=1000, random_state=42)
X_tsne = tsne.fit_transform(X)

# Визуализация
plt.figure(figsize=(10, 8))
for digit in range(10):
    mask = y == digit
    plt.scatter(X_tsne[mask, 0], X_tsne[mask, 1], label=str(digit), alpha=0.7)
plt.legend()
plt.title('t-SNE Visualization of MNIST')
plt.show()

Алгоритм t-SNE:

  1. Вычисляются условные вероятности сходства между точками в исходном пространстве (используется гауссово расстояние)
  2. Инициализируется случайное представление точек в низкомерном пространстве
  3. Минимизируется расхождение Кульбака-Лейблера между распределениями вероятностей в исходном и низкомерном пространстве
  4. Используется t-распределение (вместо гауссова) в низкомерном пространстве для большего отталкивания далёких точек

Параметры t-SNE

  • perplexity: примерно количество соседей, на которые смотрит алгоритм (обычно 5-50)
  • n_iter: количество итераций оптимизации
  • learning_rate: скорость обучения
  • random_state: для воспроизводимости

Преимущества t-SNE

  • Отлично сохраняет локальную структуру данных
  • Хорошо работает для визуализации кластеров
  • Может выявить нелинейные структуры

Недостатки t-SNE

  • Медленный алгоритм (O(n^2) сложность)
  • Не гарантирует воспроизводимость между запусками
  • Сложно интерпретировать глобальную структуру данных
  • Не масштабируется на очень большие датасеты
  • Нет чёткого способа применить к новым данным (требует переобучение)

UMAP (Uniform Manifold Approximation and Projection)

UMAP — это относительно новый метод (2018), который пытается улучшить недостатки t-SNE. UMAP основана на теории топологии и концепции локальной метрики.

Принцип работы UMAP

from umap import UMAP

# Тот же датасет MNIST
digits = load_digits()
X = digits.data
y = digits.target

# Применяем UMAP
umap = UMAP(n_components=2, n_neighbors=15, min_dist=0.1, random_state=42)
X_umap = umap.fit_transform(X)

# Визуализация
plt.figure(figsize=(10, 8))
for digit in range(10):
    mask = y == digit
    plt.scatter(X_umap[mask, 0], X_umap[mask, 1], label=str(digit), alpha=0.7)
plt.legend()
plt.title('UMAP Visualization of MNIST')
plt.show()

# UMAP можно применить к новым данным
new_data = np.random.randn(10, 64)
X_new_umap = umap.transform(new_data)

Алгоритм UMAP:

  1. Строит граф k-nearest neighbors в исходном пространстве
  2. Проецирует граф в низкомерное пространство
  3. Оптимизирует расположение точек в низкомерном пространстве через вероятностный фреймворк

Параметры UMAP

  • n_neighbors: количество соседей для построения графа (обычно 5-50)
  • min_dist: минимальное расстояние между точками в низкомерном пространстве (0-0.1)
  • n_components: размерность результата (обычно 2 или 3)
  • metric: метрика расстояния (euclidean, manhattan, cosine и т.д.)

Преимущества UMAP

  • Быстрее, чем t-SNE (O(n) сложность)
  • Лучше сохраняет глобальную структуру данных
  • Можно применить к новым данным (есть метод transform)
  • Более стабильные результаты между запусками
  • Масштабируется лучше на большие датасеты

Недостатки UMAP

  • Может быть менее хороша в сохранении очень локальных структур
  • Зависит от параметра n_neighbors

Сравнение t-SNE и UMAP

Критерийt-SNEUMAP
СкоростьМедленная (O(n^2))Быстрая (O(n))
Локальная структураОтличнаяХорошая
Глобальная структураБеднаяХорошая
Transform для новых данныхНетДа
Интерпретируемость расстоянийНизкаяЛучше
МасштабируемостьПлохаяХорошая

Практический пример

from sklearn.datasets import load_digits
from sklearn.manifold import TSNE
from umap import UMAP
import matplotlib.pyplot as plt
import time

digits = load_digits()
X = digits.data
y = digits.target

# t-SNE
start = time.time()
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)
tsne_time = time.time() - start

# UMAP
start = time.time()
umap = UMAP(n_components=2, random_state=42)
X_umap = umap.fit_transform(X)
umap_time = time.time() - start

print(f't-SNE time: {tsne_time:.2f}s')
print(f'UMAP time: {umap_time:.2f}s')

# Визуализация обоих методов
fig, axes = plt.subplots(1, 2, figsize=(15, 6))

for ax, X_data, title in [(axes[0], X_tsne, 't-SNE'),
                            (axes[1], X_umap, 'UMAP')]:
    for digit in range(10):
        mask = y == digit
        ax.scatter(X_data[mask, 0], X_data[mask, 1], label=str(digit), alpha=0.7)
    ax.set_title(title)
    ax.legend()

plt.tight_layout()
plt.show()

Вывод: выбор между t-SNE и UMAP зависит от вашей задачи. Для быстрой визуализации больших датасетов рекомендуется UMAP. Для очень точной визуализации локальных структур в небольших датасетах — t-SNE.

Что такое t-SNE и UMAP? | PrepBro