Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое 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:
- Вычисляются условные вероятности сходства между точками в исходном пространстве (используется гауссово расстояние)
- Инициализируется случайное представление точек в низкомерном пространстве
- Минимизируется расхождение Кульбака-Лейблера между распределениями вероятностей в исходном и низкомерном пространстве
- Используется 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:
- Строит граф k-nearest neighbors в исходном пространстве
- Проецирует граф в низкомерное пространство
- Оптимизирует расположение точек в низкомерном пространстве через вероятностный фреймворк
Параметры 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-SNE | UMAP |
|---|---|---|
| Скорость | Медленная (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.