itmo_conspects

Лекция 3. Методы понижения размерности, метод главных компонент

Зачастую данные нам данные имеют очень много переменных. Это может привести к “проклятью размерности”:

Поэтому нужно уменьшить размерность, не разрушая структуру данных

Существуют несколько методов уменьшения размерности:

Метод главных компонент

Метод главных компонент (Principal Component Analysis, PCA) строится на создании прямых (осей, или главных компонент), которые будут иметь наибольшее отклонение от других осей

Выбирается число этих компонент $n$ - зачастую $n = 2$, так как проще отобразить на графике - и ищутся столько прямых, дисперсия которых максимальна

Для этого:

  1. Строится матрица ковариаций $D \vec X = {\mathrm{cov} (X_i, X_j)}_{i, j}$
  2. Далее для нее находятся собственные числа $\lambda_i$ (такие, что $\lvert (D \vec X) - E \cdot \lambda \rvert = 0$)

    Найденные собственные числа показывают долю дисперсии по одной из компонент (умноженную на сумму всех собственных чисел)

  3. Берутся $n$ наибольших собственных чисел, для них вычисляются собственные вектора $\vec b$ (такие, что $(D \vec X) \cdot \vec b = \lambda_i \vec b$, при этом $\vec b \neq 0$)

    Собственные вектора показывают направления главных компонент. Они сортируются по убыванию по собственному числу, первая компонента (PC1) - это вектор с наибольшим числом, вторая компонента (PC2) - после него и так далее

  4. Далее формируется матрица проекций, где столбцы - выбранные собственные вектора. Далее вектор из выборки умножается на матрицу проекции и получается точка в новом пространстве

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

Пример использования PCA: пусть имеется датасет студентов с параметрами hours_studied (среднее время обучения в часах за день), practice_problems (среднее количество решенных задач) и sleep_hours (среднее время сна в часах)

Номер студента hours_studied practice_problems sleep_hours
0 5.80159 6.10648 7.39829
1 5.16314 3.63228 9.85228
2 7.01063 4.53442 7.9865
3 4.65311 3.35642 6.94229
4 3.17847 3.18283 8.82254
5 4.92243 3.96921 6.77916
6 6.05997 3.72426 8.20886
7 7.23881 4.98804 6.04033
8 4.16849 2.9506 6.67181
9 4.4241 4.02976 8.19686

После стандартизации получаем такую матрицу ковариаций:

  hours_studied practice_problems sleep_hours
hours_studied 1 0.65042 -0.274431
practice_problems 0.65042 1 -0.241426
sleep_hours -0.274431 -0.241426 1

Для нее находятся собственные числа 2.01551082, 0.93050171 и 0.38732081

Далее находятся собственные вектора:

  PC1 PC2 PC3
hours_studied 0.649822 0.258358 0.71483
practice_problems 0.640601 0.320023 -0.698008
sleep_hours -0.409098 0.911502 0.0424537

Получаем матрицу проекций

     
0.649822 0.258358 0
0.640601 0.320023 0
-0.409098 0.911502 0

Далее умножаем вектора из датасета на матрицу, получаем 10 точек на плоскости:

Пример PCA

Код примера - machlearn_pca_example.py


Результат PCA часто используется для:

Так как главные компоненты - линейные комбинации исходных признаков, метод главных компонент плохо подходит для нелинейных связей

Для визуализации лучше всего выбрать 2-3 компоненты

Для обучения лучше оставить как можно больше компонент. Для стандартизованных данных можно выбрать столько компонент, для которых собственные числа больше единицы (правило Кайзера) или пока доля объясненной дисперсии не составит не меньше порога (обычно 85%-95%)