PCA простыми словами: зачем нужно снижение размерности в Data Science

PCA простыми словами: зачем снижать размерность, как это связано с геометрией данных и почему метод до сих пор полезен в Data Science.

Содержание Следующие статьи
Содержание PCA простыми словами: зачем нужно снижение размерности в Data Science
  1. Почему много признаков не всегда означает много пользы
  2. Что именно ищет PCA
  3. Где это полезно в ML
  4. Почему без масштабирования интерпретация ломается

Почему много признаков не всегда означает много пользы

Когда в данных десятки или сотни признаков, возникает ощущение, что модель получает больше информации и значит должна работать лучше. Но в реальности часть признаков может дублировать друг друга, шуметь или просто растягивать пространство так, что анализ и обучение становятся менее устойчивыми. PCA полезен именно здесь: он не «магически улучшает данные», а помогает посмотреть на них под более удачным углом.

Интуитивно это похоже на попытку сфотографировать вытянутую фигуру. Если камера повернута неудачно, объект кажется размытым и неудобным для анализа. Если найти главный угол обзора, структура становится понятнее. PCA делает что-то похожее с многомерными данными.

Что именно ищет PCA

Формула: раздел математики — линейная алгебра
$$ z = X w $$
Что означает эта формула

Главная компонента — это новое направление в пространстве признаков. Мы проектируем исходные данные X на вектор направления w и получаем новую координату z, в которой сохранена максимальная вариация данных.

Что означает каждый символ
  • z — координата объекта в новом компонентном пространстве
  • X — матрица исходных признаков
  • w — вектор направления главной компоненты

Здесь важна геометрия. PCA ищет такое направление, вдоль которого облако данных имеет наибольший разброс. Потом второе направление — перпендикулярное первому и тоже максимально информативное, и так далее. Поэтому PCA — не просто техника сжатия, а способ переописать данные через главные оси их формы.

Где это полезно в ML

Во-первых, в визуализации: когда нужно увидеть структуру данных в 2D или 3D. Во-вторых, в борьбе с мультиколлинеарностью и избыточностью признаков. В-третьих, как предварительный шаг перед моделью, если признаков много и часть из них шумит. Но здесь важно не романтизировать метод: PCA не понимает target. Он сжимает вариацию признаков, а не гарантирует лучшую предсказательную силу.

Поэтому хороший вопрос всегда звучит так: сохраняет ли PCA ту информацию, которая нужна именно для моей задачи?

Почему без масштабирования интерпретация ломается

Если один признак измеряется в тысячах, а другой в долях, PCA почти наверняка будет ориентироваться на первый просто из-за масштаба. Поэтому перед методом обычно делают стандартизацию. Это не формальность, а способ убедиться, что компоненты отражают структуру данных, а не произвольные единицы измерения.

example.pyPython
import pandas as pd  # собираем маленький набор признаков для демонстрации PCA
from sklearn.preprocessing import StandardScaler  # приводим признаки к сопоставимому масштабу
from sklearn.decomposition import PCA  # извлекаем главные компоненты данных

frame = pd.DataFrame({  # задаем признаки с частичной избыточностью
    'math_score': [65, 72, 80, 90, 95],  # первый числовой признак
    'physics_score': [60, 70, 78, 88, 93],  # второй, близкий по структуре признак
    'cs_score': [68, 74, 82, 91, 97],  # третий признак, тоже движется в похожем направлении
})

scaled = StandardScaler().fit_transform(frame)  # стандартизируем признаки до среднего 0 и дисперсии 1
pca = PCA(n_components=2)  # оставляем две главные компоненты вместо трех исходных осей
components = pca.fit_transform(scaled)  # проектируем объекты в новое пространство признаков
print(pca.explained_variance_ratio_.round(3))  # смотрим, сколько вариации удерживает каждая компонента
print(components.round(3))  # читаем новые координаты объектов после снижения размерности

После такого примера PCA обычно перестает казаться абстрактной темой. Становится видно, что это просто аккуратная геометрическая операция: повернуть пространство данных так, чтобы главные направления были выражены яснее.

Что читать дальше

Связанные статьи по этой теме

Canary deployment для моделей: как выкатывать новую версию без лишнего риска Latency в ML API: почему быстрая модель важна не меньше точной Batch inference и real-time inference: как выбирать режим работы модели
Вернуться в блог