ИнтВиз

Линейная алгебра · модуль 5 из 14

Метод главных компонент: сжатие признаков

Точки — серверы: по осям нагрузка CPU и потребление RAM в стандартных отклонениях. Собственные векторы матрицы ковариаций показывают направления наибольшего разброса.

  • PC1: главная компонента
  • PC2
  • серверы (160 точек)

Теория

Пусть есть $n$ объектов с двумя признаками, например нагрузкой CPU и потреблением RAM. После центрирования (вычитания среднего) разброс данных описывает выборочная матрица ковариаций:

$$ \Sigma = \frac{1}{n - 1} X^{\mathsf T} X = \begin{pmatrix} \operatorname{Var}(x_1) & \operatorname{Cov}(x_1, x_2) \\ \operatorname{Cov}(x_1, x_2) & \operatorname{Var}(x_2) \end{pmatrix}. $$

Матрица $\Sigma$ симметрична, поэтому у неё есть ортонормированный базис собственных векторов:

$$ \Sigma v_i = \lambda_i v_i, \qquad \lambda_1 \ge \lambda_2 \ge 0 . $$

Вектор $v_1$ (первая главная компонента, PC1) — направление наибольшего разброса данных, $\lambda_1$ — дисперсия вдоль него. Вектор $v_2$ перпендикулярен $v_1$.

Сжатие. Проекция $z = X v_1$ заменяет два признака одним. Доля сохранённой информации измеряется долей объяснённой дисперсии:

$$ \frac{\lambda_1}{\lambda_1 + \lambda_2}, \qquad \text{потеря} = \frac{\lambda_2}{\lambda_1 + \lambda_2}. $$

Чем сильнее коррелируют признаки, тем вытянутее облако точек и тем меньше теряется при отбрасывании PC2. При нулевой корреляции и одинаковом масштабе признаков обе компоненты равноценны, и сжатие теряет около половины информации.

Где это применяется в IT

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

  • Новые оси. Собственные векторы матрицы ковариаций задают новые оси, собственные числа равны дисперсии вдоль них.
  • Корреляция. Чем сильнее связаны признаки, тем меньше теряется при отбрасывании последних компонент.
  • Подготовка данных. Перед PCA данные центрируют, а признаки в разных единицах измерения ещё и нормируют.

Код на Python

Загружаю пример…