Какие знаешь методы снижения размерности?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Методы снижения размерности
Снижение размерности (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)
Практические рекомендации
- Для визуализации: t-SNE или UMAP
- Для классификации: PCA или LDA
- Для сохранения структуры: UMAP или Isomap
- Для интерпретируемости: отбор признаков
- Для больших данных: Incremental PCA
- Проверяй объясненную дисперсию: используй scree plot для выбора числа компонент
Выбор метода зависит от целей: визуализация, ускорение, шум, интерпретируемость.