Перейти к содержанию

Методы снижения размерности

Обзор

Снижение размерности — это процесс уменьшения количества признаков в данных при сохранении важной информации. Используется для: - Визуализации данных - Ускорения обучения моделей - Борьбы с проклятием размерности - Удаления шума и коррелированных признаков

PCA (Principal Component Analysis)

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

PCA находит новые оси (главные компоненты), которые: 1. Максимально сохраняют дисперсию данных 2. Ортогональны друг другу

Алгоритм

  1. Стандартизировать данные
  2. Вычислить ковариационную матрицу
  3. Найти собственные значения и собственные векторы
  4. Отсортировать по убыванию собственных значений
  5. Выбрать top-k компонент

Выбор количества компонент

  • Объясненная дисперсия: выбрать k, чтобы сохранить 95% дисперсии
  • Каменистая осыпь (Scree plot): поиск "излома" на графике

Преимущества и недостатки

Преимущества Недостатки
Линейная сложность Только линейные зависимости
Сохраняет глобальную структуру Чувствителен к выбросам
Уникальное решение Трудно интерпретировать компоненты

t-SNE (t-Distributed Stochastic Neighbor Embedding)

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

t-SNE сохраняет локальные структуры данных, моделируя сходства между точками в исходном и низкоразмерном пространствах.

Ключевые идеи

  • Использует распределение Стьюдента для тяжеловесных хвостов
  • Минимизирует KL-дивергенцию между распределениями
  • Хорошо сохраняет локальные кластеры

Гиперпараметры

  • n_components: целевая размерность (обычно 2 или 3)
  • perplexity: баланс локальной/глобальной структуры (5-50)
  • learning_rate: темп обучения (10-1000)
  • n_iter: количество итераций (минимум 250)

Преимущества и недостатки

Преимущества Недостатки
Сохраняет локальную структуру Вычислительно сложный O(n²)
Визуализация кластеров Не сохраняет глобальную структуру
Работает с нелинейными данными Результаты зависят от параметров
Не подходит для новых данных

UMAP (Uniform Manifold Approximation and Projection)

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

UMAP строит топологическое представление данных, предполагая, что данные лежат на многообразии.

Ключевые идеи

  • Теория римановой геометрии
  • Сохраняет как локальную, так и глобальную структуру
  • Быстрее t-SNE

Гиперпараметры

  • n_components: целевая размерность
  • n_neighbors: баланс локальной/глобальной структуры (5-50)
  • min_dist: минимальное расстояние между точками (0.0-0.99)
  • metric: метрика расстояния

Преимущества и недостатки

Преимущества Недостатки
Быстрее t-SNE Сложнее в настройке
Сохраняет глобальную структуру
Масштабируемость
Может трансформировать новые данные

Сравнение методов

Метод Тип Скорость Локальная структура Глобальная структура Новые данные
PCA Линейный Очень быстро Средне Хорошо Да
t-SNE Нелинейный Медленно Отлично Плохо Нет
UMAP Нелинейный Быстро Отлично Хорошо Да

Другие методы

LDA (Linear Discriminant Analysis)

  • Обучение с учителем
  • Максимизирует разделимость классов
  • Для классификации

Kernel PCA

  • Нелинейное расширение PCA
  • Использует kernel trick
  • Для нелинейных зависимостей

Autoencoders

  • Нейросетевой подход
  • Нелинейное снижение размерности
  • Гибкая архитектура

Пример кода

from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
import umap
import matplotlib.pyplot as plt

# PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# Объясненная дисперсия
explained_variance = pca.explained_variance_ratio_
cumulative_variance = explained_variance.cumsum()

# Scree plot
plt.plot(range(1, len(explained_variance)+1), cumulative_variance, 'bo-')
plt.xlabel('Количество компонент')
plt.ylabel('Накопленная дисперсия')
plt.axhline(y=0.95, color='r', linestyle='--', label='95%')
plt.legend()
plt.show()

# t-SNE
tsne = TSNE(n_components=2, perplexity=30, n_iter=1000, random_state=42)
X_tsne = tsne.fit_transform(X_scaled)

# Визуализация
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='viridis', alpha=0.6)
plt.title('t-SNE визуализация')
plt.colorbar()
plt.show()

# UMAP
umap_model = umap.UMAP(n_components=2, n_neighbors=15, min_dist=0.1, random_state=42)
X_umap = umap_model.fit_transform(X_scaled)

# Визуализация
plt.scatter(X_umap[:, 0], X_umap[:, 1], c=y, cmap='viridis', alpha=0.6)
plt.title('UMAP визуализация')
plt.colorbar()
plt.show()

# Трансформация новых данных (только PCA и UMAP)
X_new_pca = pca.transform(X_new)
X_new_umap = umap_model.transform(X_new)

Практические советы

  1. Всегда стандартизируйте данные перед PCA
  2. Начните с PCA как базового метода
  3. Используйте t-SNE/UMAP для визуализации
  4. Подбирайте perplexity для t-SNE экспериментально
  5. Сохраняйте обученные модели для трансформации новых данных
  6. Интерпретируйте компоненты через loadings (PCA)

Применение

  • Визуализация высокоразмерных данных
  • Предобработка для других алгоритмов
  • Сжатие признаков
  • Удаление шума
  • Исследовательский анализ

См. также