# Снижение размерности и PCA

> Реальные данные живут в сотнях и тысячах измерений, но полезная структура почти всегда умещается в нескольких. PCA — главный инструмент, чтобы сжать пространство признаков, сохранив максимум информации, — и любимый теоретический вопрос на собеседованиях.

Раздел: [Основы машинного обучения](https://ml-book.com/s/ml-basics/) · Страница темы: https://ml-book.com/t/dimensionality-pca/ · Обновлено: 2026-07-07 · Источник: ml-book.com, учебник делается сообществом

## Зачем уменьшать размерность

Четыре причины. **Визуализация**: человек видит максимум три измерения, а понять данные хочется глазами. **Шум**: слабые направления дисперсии часто содержат в основном шум измерений — отбросив их, модель иногда становится точнее. **Скорость и память**: 50 признаков вместо 5000 — это на порядки дешевле обучение и хранение. **Проклятие размерности** (curse of dimensionality): в высокой размерности расстояния вырождаются и методам вроде [kNN и k-means](https://ml-book.com/t/clustering-knn/) становится нечем дышать.

## PCA: направления максимальной дисперсии

Метод главных компонент (PCA, principal component analysis) отвечает на вопрос: «если можно оставить только одну ось, на которую спроецировать данные, какая ось потеряет меньше всего?» Ответ PCA: та, вдоль которой дисперсия проекций максимальна — разброс и есть информация, различия между объектами. Эта ось называется первой главной компонентой (PC1). Вторая компонента (PC2) — направление максимальной оставшейся дисперсии, обязательно ортогональное первой, и так далее. Каждая компонента — линейная комбинация исходных признаков.

Математически всё сводится к ковариационной матрице центрированных данных: главные компоненты — её собственные векторы (eigenvectors), а собственные значения (eigenvalues) λ_i — дисперсии вдоль них. Отсюда ключевая метрика — доля объяснённой дисперсии (explained variance ratio):

`EVR_i = λ_i / (λ_1 + λ_2 + … + λ_d)`

Сколько компонент оставить? Смотрят на накопленную долю: обычно берут столько компонент, чтобы суммарно объяснить 90–95% дисперсии, или ищут излом на графике λ_i (scree plot). Проекция на первые m компонент — лучшее (по среднеквадратичной ошибке) линейное сжатие данных до m измерений.

> **💡 Ключевая мысль**
>
> PCA не выбрасывает признаки — он поворачивает систему координат так, чтобы вся «интересная» дисперсия собралась в первых осях, а затем отбрасывает оси, где почти ничего не происходит.

> 🎛 Интерактивная визуализация — на странице темы: https://ml-book.com/t/dimensionality-pca/

## Обязательная подготовка данных

Два шага, без которых PCA считается неправильно. **Центрирование**: из каждого признака вычитается среднее — иначе первая компонента укажет не на направление разброса, а примерно на средний вектор данных. **Масштабирование**: дисперсия зависит от единиц измерения, и признак «доход в рублях» с дисперсией в миллиарды затмит «возраст» с дисперсией в сотни — PC1 просто повторит самый «крупный» признак. Поэтому перед PCA признаки стандартизуют (вычесть среднее, поделить на стандартное отклонение), что эквивалентно работе с корреляционной матрицей вместо ковариационной.

И одна процедурная тонкость, за которую снимают баллы на собеседовании: PCA — часть модели, а не «безобидная предобработка». Компоненты и параметры стандартизации подбираются *только по обучающей выборке*, а тест лишь проецируется на них. Если посчитать PCA по всем данным сразу, информация о тесте просочится в признаки (data leakage), и оценка качества станет завышенной.

## Ограничения и нелинейные соседи

PCA умеет только поворачивать оси: он ищет *линейные* комбинации признаков. Если данные лежат на изогнутом многообразии — «швейцарский рулет», кольца, кластеры на сфере — линейная проекция сомнёт структуру. Для визуализации таких данных используют t-SNE и UMAP: они стараются сохранить локальные окрестности точек при вложении в 2D. Но у них свои подводные камни: результат зависит от гиперпараметров (perplexity, число соседей) и случайного старта, а главное — **расстояния между кластерами и их размеры на t-SNE-картинке не интерпретируются**. Два облака рядом на картинке не обязаны быть похожими в исходном пространстве. Это инструменты разглядывания, а не измерения: считать метрики и строить признаки лучше на PCA-проекциях или исходных данных. В мире LLM снижение размерности регулярно встречается при работе с [эмбеддингами](https://ml-book.com/t/embeddings/) — например, чтобы визуализировать семантические кластеры документов.

> **⚠️ Подводный камень**
>
> PCA не смотрит на целевую переменную. Направление с маленькой дисперсией может быть самым важным для классификации — отбросив «тихие» компоненты, можно выбросить весь сигнал. Проверяй качество downstream-модели до и после сжатия, а не только объяснённую дисперсию.

> **🎤 На собеседовании**
>
> - «Что максимизирует PCA?» — дисперсию проекций; эквивалентно минимизирует среднеквадратичную ошибку линейной реконструкции.
> - «Что такое главные компоненты математически?» — собственные векторы ковариационной матрицы; собственные значения — дисперсии вдоль них.
> - «Зачем стандартизация перед PCA?» — без неё компоненты захватят признаки с крупными единицами измерения.
> - «Можно ли верить расстояниям между кластерами на t-SNE?» — нет: метод сохраняет локальные окрестности, глобальная геометрия искажается.

## Связанные темы

- [kNN и кластеризация](https://ml-book.com/t/clustering-knn/)
- [Эмбеддинги и word2vec](https://ml-book.com/t/embeddings/)
- [Векторный поиск и ANN-индексы](https://ml-book.com/t/vector-search/)

---

Интерактив, тест из 12 вопросов и карточки терминов — на странице темы: https://ml-book.com/t/dimensionality-pca/
Весь учебник в markdown: https://ml-book.com/llms-full.txt · Оглавление для агентов: https://ml-book.com/llms.txt
