EssayAI
Блог
Блог
Естественные науки

Метод главных компонент (PCA): как работает и формулы

11 июня 2026Время чтения: 8 минут
#метод главных компонент#pca#снижение размерности#ковариационная матрица#собственные значения

Метод главных компонент, или PCA (principal component analysis), - это базовый приём снижения размерности данных: он находит новые оси, вдоль которых разброс точек максимален, и позволяет описать набор признаков меньшим числом некоррелированных переменных почти без потери информации. PCA встречается в машинном обучении, обработке изображений, биоинформатике и эконометрике - везде, где много признаков, а смысла в них меньше, чем кажется. Ниже разберём, на чём держится метод главных компонент, как из ковариационной матрицы получить собственные значения и векторы, как считать долю объяснённой дисперсии и сколько компонент стоит оставить. Чтобы сразу почувствовать связь корреляции и направлений компонент, покрутите калькулятор ниже: он показывает облако точек, главные оси и долю дисперсии разом, а дальше мы разберём каждую формулу строго.

Идея метода главных компонент простыми словами

Представьте облако точек на плоскости, вытянутое по диагонали: признаки xx и yy сильно скоррелированы, и почти вся информация о точке умещается в одном числе - её положении вдоль длинной оси облака. PCA как раз и ищет эту длинную ось. Первая главная компонента (PC1) - это направление наибольшего разброса данных, вторая (PC2) перпендикулярна ей и собирает остаток. Спроецировав точки на PC1, мы заменяем два признака одним, теряя лишь малую долю дисперсии.

Формально метод главных компонент делает три вещи: центрирует данные (вычитает среднее по каждому признаку), строит новый ортогональный базис из направлений максимального разброса и сортирует эти направления по убыванию дисперсии. Старые признаки часто коррелируют между собой, новые - компоненты - всегда некоррелированы. Это и есть смысл слова «главные»: первые компоненты несут основную часть информации.

Эллипс рассеяния данных поворачивается вместе с ростом корреляции: главная ось PC1 вытягивается вдоль наибольшего разброса, перпендикулярная PC2 укорачивается, а полоса доли объяснённой дисперсии PC1 ползёт вверх к 100%

Ковариационная матрица как основа PCA

Разброс многомерных данных описывает ковариационная матрица. Для двух признаков она симметрична и имеет вид:

C=(σx2cov(x,y)cov(x,y)σy2)=(σx2ρσxσyρσxσyσy2),C = \begin{pmatrix} \sigma_x^2 & \mathrm{cov}(x,y) \\ \mathrm{cov}(x,y) & \sigma_y^2 \end{pmatrix} = \begin{pmatrix} \sigma_x^2 & \rho\,\sigma_x\sigma_y \\ \rho\,\sigma_x\sigma_y & \sigma_y^2 \end{pmatrix},

где σx2\sigma_x^2 и σy2\sigma_y^2 - дисперсии признаков, а ρ\rho - коэффициент корреляции. На диагонали стоит разброс каждого признака отдельно, вне диагонали - их совместная изменчивость. Если признаки независимы, ρ=0\rho = 0 и внедиагональные элементы зануляются - тогда сами оси xx и yy уже являются главными компонентами и поворачивать ничего не нужно.

Важная деталь: перед расчётом ковариационной матрицы данные обязательно центрируют, а часто и стандартизируют (делят на стандартное отклонение). Если признаки в разных единицах - рубли и проценты, килограммы и метры, - без стандартизации PCA будет «слушать» только признак с самым большим численным разбросом, и результат окажется бессмысленным.

Собственные значения и собственные векторы

Главные компоненты - это собственные векторы ковариационной матрицы, а дисперсия вдоль каждой компоненты равна соответствующему собственному значению. Их находят из характеристического уравнения:

det(CλI)=0.\det(C - \lambda I) = 0.

Для матрицы 2×22\times2 оно раскрывается в квадратное уравнение, и собственные значения выписываются в замкнутом виде:

λ1,2=σx2+σy22±(σx2σy22)2+(ρσxσy)2.\lambda_{1,2} = \frac{\sigma_x^2 + \sigma_y^2}{2} \pm \sqrt{\left(\frac{\sigma_x^2 - \sigma_y^2}{2}\right)^2 + \big(\rho\,\sigma_x\sigma_y\big)^2}.

Большее значение λ1\lambda_1 отвечает первой компоненте, меньшее λ2\lambda_2 - второй. Угол поворота главной оси к исходной оси xx удобно получить из той же матрицы:

θ=12atan2(2ρσxσy,  σx2σy2).\theta = \frac{1}{2}\,\mathrm{atan2}\big(2\rho\,\sigma_x\sigma_y,\; \sigma_x^2 - \sigma_y^2\big).

Заметьте: сумма собственных значений равна сумме дисперсий исходных признаков, λ1+λ2=σx2+σy2\lambda_1 + \lambda_2 = \sigma_x^2 + \sigma_y^2. PCA не создаёт и не уничтожает разброс - он только перераспределяет его между ортогональными осями так, чтобы первые оси забрали как можно больше.

Облако скоррелированных точек с наложенными осями: длинная синяя стрелка PC1 идёт вдоль главного направления разброса, короткая оранжевая PC2 перпендикулярна ей
Облако скоррелированных точек с наложенными осями: длинная синяя стрелка PC1 идёт вдоль главного направления разброса, короткая оранжевая PC2 перпендикулярна ей

Доля объяснённой дисперсии и выбор числа компонент

Главный практический вопрос PCA: сколько компонент оставить? Ответ даёт доля объяснённой дисперсии - вклад каждой компоненты в общий разброс:

EVRi=λiλ1+λ2++λd.\text{EVR}_i = \frac{\lambda_i}{\lambda_1 + \lambda_2 + \dots + \lambda_d}.

Если первая компонента объясняет 90% дисперсии, остальные можно отбросить почти безболезненно: размерность падает, а информация сохраняется. На практике компоненты добавляют по убыванию, пока накопленная доля не достигнет порога - обычно 90% или 95%.

Второй классический инструмент - график каменистой осыпи (scree plot): собственные значения откладывают по убыванию, и число компонент берут до «локтя», где кривая резко уплощается. После локтя компоненты вносят лишь шум. Калькулятор выше показывает долю объяснённой дисперсии полосой: видно, как при росте корреляции ρ\rho вклад PC1 быстро приближается к 100%, и одной компоненты становится достаточно.

Точки данных проецируются на ось PC1: двумерное облако схлопывается в одномерную прямую, и накопленная доля сохранённой дисперсии показывает, как мало теряется при снижении размерности с двух признаков до одного

Связь с сингулярным разложением (SVD)

На практике PCA редко считают через явную ковариационную матрицу - она может быть огромной и плохо обусловленной. Вместо этого применяют сингулярное разложение матрицы центрированных данных X=UΣVX = U \Sigma V^\top. Столбцы VV - это и есть главные компоненты, а квадраты сингулярных чисел связаны с собственными значениями: λi=si2/(n1)\lambda_i = s_i^2 / (n-1), где nn - число объектов. SVD численно устойчивее и работает напрямую с данными, без возведения в квадрат, которое теряет точность. Поэтому в библиотеках вроде scikit-learn под капотом метода главных компонент почти всегда лежит именно SVD, а не разложение ковариационной матрицы.

Пример расчёта на двух признаках

Разберём конкретные числа, совпадающие с настройками калькулятора по умолчанию. Пусть разброс первого признака σx=2\sigma_x = 2, второго σy=1\sigma_y = 1, а корреляция между ними ρ=0,8\rho = 0{,}8. Тогда дисперсии равны σx2=4\sigma_x^2 = 4 и σy2=1\sigma_y^2 = 1, а ковариация - cov=ρσxσy=0,821=1,6\mathrm{cov} = \rho\,\sigma_x\sigma_y = 0{,}8 \cdot 2 \cdot 1 = 1{,}6. Ковариационная матрица принимает вид:

C=(41,61,61).C = \begin{pmatrix} 4 & 1{,}6 \\ 1{,}6 & 1 \end{pmatrix}.

Подставляем в формулу собственных значений. Полусумма дисперсий равна (4+1)/2=2,5(4 + 1)/2 = 2{,}5, а подкоренное выражение - ((41)/2)2+1,62=1,52+2,56=4,81((4 - 1)/2)^2 + 1{,}6^2 = 1{,}5^2 + 2{,}56 = 4{,}81, корень из которого примерно 2,1932{,}193. Отсюда:

λ1=2,5+2,1934,69,λ2=2,52,1930,31.\lambda_1 = 2{,}5 + 2{,}193 \approx 4{,}69, \qquad \lambda_2 = 2{,}5 - 2{,}193 \approx 0{,}31.

Проверка: сумма λ1+λ2=5\lambda_1 + \lambda_2 = 5 совпадает с суммой дисперсий σx2+σy2=4+1=5\sigma_x^2 + \sigma_y^2 = 4 + 1 = 5, как и должно быть. Доля объяснённой дисперсии первой компоненты:

EVR1=λ1λ1+λ2=4,6950,939=93,9%.\text{EVR}_1 = \frac{\lambda_1}{\lambda_1 + \lambda_2} = \frac{4{,}69}{5} \approx 0{,}939 = 93{,}9\%.

То есть одна главная компонента сохраняет почти 94% разброса - двумерные данные можно смело сжать до одного числа. Угол поворота PC1 к оси xx выходит около 23,4°23{,}4°. Если в калькуляторе выставить ровно эти значения, метки PC1 и PC2, собственные значения и полоса дисперсии покажут те же числа.

Частые ошибки

  • Пропуск центрирования и стандартизации. Без вычитания среднего PCA найдёт направление к началу координат, а не направление разброса. Без стандартизации разнородных признаков метод подчинится признаку с наибольшим численным масштабом.
  • Путаница собственных значений и векторов. Собственный вектор задаёт направление компоненты, собственное значение - дисперсию вдоль неё. Долю дисперсии считают по значениям, а не по векторам.
  • Интерпретация компонент как исходных признаков. Главная компонента - это линейная комбинация всех признаков, а не один из них. Называть PC1 «по сути ростом» можно лишь с оговоркой, посмотрев на веса (нагрузки).
  • Слишком жёсткий порог. Требование сохранить 99,9% дисперсии часто оставляет почти все компоненты и обнуляет смысл снижения размерности. Разумный порог - 90-95%.
  • Применение к категориальным признакам напрямую. PCA работает с числовыми данными и линейными связями; категории и сильно нелинейные зависимости требуют других методов (kernel PCA, t-SNE, UMAP).

FAQ

Что показывают собственные значения в методе главных компонент? Каждое собственное значение λi\lambda_i равно дисперсии данных вдоль соответствующей главной компоненты. Сумма всех собственных значений равна суммарной дисперсии исходных признаков, а отношение λi\lambda_i к этой сумме - доля объяснённой дисперсии данной компоненты.

Сколько главных компонент нужно оставлять? Столько, чтобы накопленная доля объяснённой дисперсии достигла нужного порога - чаще всего 90% или 95%. Альтернатива - график каменистой осыпи: компоненты берут до «локтя», где собственные значения резко перестают убывать.

Чем PCA отличается от линейной регрессии? Регрессия минимизирует ошибку предсказания целевой переменной по вертикали и требует разделения на признаки и отклик. PCA не использует целевую переменную вовсе: он ищет направление максимального разброса данных и минимизирует перпендикулярные отклонения точек от оси, то есть решает задачу без учителя.

Коротко

Метод главных компонент находит ортогональные оси максимального разброса данных: главные компоненты - это собственные векторы ковариационной матрицы CC, а дисперсия вдоль каждой равна собственному значению λi\lambda_i. Для матрицы 2×22\times2 значения выписываются явной формулой через дисперсии и корреляцию, а доля объяснённой дисперсии λi/λj\lambda_i / \sum \lambda_j подсказывает, сколько компонент оставить - обычно до накопленных 90-95%. На больших данных PCA считают через сингулярное разложение, численно более устойчивое, чем явное разложение ковариационной матрицы.

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также