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

Какие знаешь методы снижения размерности?

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

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

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

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

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

Снижение размерности (dimensionality reduction) — один из ключевых инструментов в ML для борьбы с проклятием размерности, ускорения вычислений и визуализации данных. Рассмотрю основные категории методов.

Линейные методы

Principal Component Analysis (PCA) — самый классический метод. Ищет направления максимальной дисперсии в данных. PCA ортогональен и находит главные компоненты через собственные векторы матрицы ковариации:

from sklearn.decomposition import PCA

pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)
print(f"Explained variance: {pca.explained_variance_ratio_}")

Factor Analysis — предполагает, что данные порождены скрытыми факторами плюс шум. Более гибкий, чем PCA, но требует знания количества факторов.

Linear Discriminant Analysis (LDA) — контролируемый метод, ищет направления, максимально разделяющие классы. Эффективен для классификации.

Singular Value Decomposition (SVD) — матричное разложение, лежит в основе PCA. Разлагает матрицу X на U * Σ * V^T.

Нелинейные методы

t-SNE (t-Distributed Stochastic Neighbor Embedding) — сохраняет локальную структуру данных, идеален для визуализации. Преобразует расстояния в вероятности распределения Стьюдента:

from sklearn.manifold import TSNE

tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_embedded = tsne.fit_transform(X)

Недостаток: вычислительно дорогой, требует O(n^2) операций.

UMAP (Uniform Manifold Approximation and Projection) — современная альтернатива t-SNE. Быстрее (O(n log n)) и лучше сохраняет глобальную структуру:

from umap import UMAP

umap = UMAP(n_components=2, n_neighbors=15, min_dist=0.1)
X_embedded = umap.fit_transform(X)

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

Locally Linear Embedding (LLE) — каждая точка аппроксимируется линейной комбинацией соседей. Сохраняет локальную линейную структуру.

Методы на основе автокодировщиков

Autoencoder — нейросеть с узким слоем в середине. Encoder сжимает данные, decoder восстанавливает:

from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

input_dim = X.shape[1]
encoded_dim = 2

input_layer = Input(shape=(input_dim,))
encoded = Dense(32, activation="relu")(input_layer)
encoded = Dense(encoded_dim, activation="relu")(encoded)

decoded = Dense(32, activation="relu")(encoded)
decoded = Dense(input_dim, activation="sigmoid")(decoded)

autoencoder = Model(input_layer, decoded)
autoencoder.compile(optimizer="adam", loss="mse")
autoencoder.fit(X, X, epochs=50)

encoder = Model(input_layer, encoded)
X_reduced = encoder.predict(X)

Variational Autoencoder (VAE) — вероятностный подход с регуляризацией KL-divergence. Выучивает распределение латентного пространства.

Методы отбора признаков

Feature Selection — выбирает подмножество исходных признаков вместо их трансформации:

  • Фильтровые методы (Filter): корреляция, информационный прирост
  • Встроенные методы (Embedded): L1-регуляризация (Lasso), важность признаков деревьев
  • Оберточные методы (Wrapper): RFE (Recursive Feature Elimination)
from sklearn.feature_selection import SelectKBest, f_classif

selector = SelectKBest(f_classif, k=5)
X_selected = selector.fit_transform(X, y)

Практические рекомендации

  1. Для визуализации: t-SNE или UMAP
  2. Для классификации: PCA или LDA
  3. Для сохранения структуры: UMAP или Isomap
  4. Для интерпретируемости: отбор признаков
  5. Для больших данных: Incremental PCA
  6. Проверяй объясненную дисперсию: используй scree plot для выбора числа компонент

Выбор метода зависит от целей: визуализация, ускорение, шум, интерпретируемость.

Какие знаешь методы снижения размерности? | PrepBro