Эта статья является продолжением серии статей о снижении размерности и визуализации. Если вы еще не прошли часть 1, я настоятельно рекомендую вам сначала пройти ее здесь.

В этой статье мы поймем один такой метод уменьшения размерности, называемый анализом главных компонентов (PCA).

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

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

Рассмотрим следующий пример:

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

Мы хотим уменьшить размерность этого набора данных. Это означает, что мы хотим сократить d-мерные данные (в данном случае 2-D) до d’-мерных данных (в данном случае 1-D), где d ’‹ d. По сути, мы хотим преобразовать это двухмерное представление данных в одномерное. Мы можем добиться этого, избавившись от одной из функций. Но суть спора в том, что у нас есть 2 характеристики (f1 - рост людей, f2 - черные волосы). Теперь, как вы решаете, какую функцию оставить, а от какой избавиться?

Наблюдайте за диаграммой рассеяния. Если бы я провел перпендикулярную линию от точек данных к осям (красные линии), было бы очень ясно, что разброс точек (он же дисперсия) высок на f1 по сравнению с f2. Теперь высокая дисперсия подразумевает разнообразную информацию о данных, и, поскольку разброс на f2 низкий, он содержит меньше информации, которую можно потерять, по сравнению с f1, где разброс высокий.

Итак, чтобы преобразовать эти двухмерные данные в одномерные, мы отбрасываем функцию f2 и используем функцию f1.

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

Сюжет сгущается

То, что мы видели выше на диаграмме рассеяния, похоже на идеальный набор данных, созданный для объяснения этой концепции, но в реальном мире мы вряд ли встретим такие идеальные наборы данных.

Рассмотрим пример ниже:

Допустим, мы выполнили стандартизацию столбцов, которая подразумевает, что среднее значение столбцов равно нулю 0, а стандартное отклонение равно 1.

Среднее [f1] = Среднее [f2] = 0 и std_dev [f1] = std_dev [f2] = 1

Предположим, построив график рассеяния, мы получим график, подобный приведенному выше.

Теперь, в отличие от первого графика, существует достаточный разброс данных как по f1, так и по f2, что означает, что оба имеют довольно хорошую дисперсию. Так как же здесь уменьшить размерность? Должны ли мы просто случайным образом выбрать одну функцию и отбросить другую? НЕТ

Скажем, я рисую линию в направлении максимальной дисперсии и называю ее x1, а я рисую другую линию x2, которая перпендикулярна x1. Теперь я вижу, что разброс точек на x1 очень велик, тогда как на x2 он низкий. Это очень похоже на то, что мы узнали на примере зависимости цвета волос от роста. Если мы подумаем об этом логически, все, что мы сделали, это поворот осей на угол θ, где мы повернули оси f1 и f2 так, что мы получили максимальный разброс точек (высокая дисперсия) по x1.

Затем мы хотим найти направление x1 так, чтобы дисперсия точек данных, проецируемых на x1, была максимальной. Чтобы найти направление x1, мы создаем единичный вектор (u1) в направлении x1. Вы можете спросить, почему мы используем единичный вектор? Это потому, что для единичного вектора его величина (скалярная составляющая) равна 1, и нас в основном интересует направленная часть x1. Следовательно,

u1: Единичный вектор, который представляет направление, в котором, если мы спроецируем точки данных, мы получим максимальный разброс (дисперсию)

|| u1 || = длина u1 = 1

Давайте пока рассмотрим только одну точку данных, чтобы понять расчеты. Позже мы можем распространить ту же формулировку на остальные точки.

Представьте, что у нас есть график, как показано ниже - всего с одной точкой данных. В остальном все осталось так же, как указано выше. На графике у меня есть мои исходные оси {f1, f2}, у меня есть точка данных xi, у меня есть единичный вектор u1, который находится в направлении максимальной дисперсии {x1}. Я проецирую точку xi на единичный вектор, могу назвать это точкой x’i (читается как x -i-тире). Здесь x’i = проекция точки xi на u1.

Мы знаем, что проекцию точки можно представить следующим образом:
x’i = (u1.xi) / || u1 ||

Английская интерпретация приведенного выше уравнения будет выглядеть так:
Проекция xi на u1 = (скалярное произведение u1 и xi) / (длина u1)

Остальная часть вывода представлена ​​на картинке (так как это легче объяснить с помощью ручки и бумаги).

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

Английская интерпретация приведенного выше уравнения:

Мы хотим максимизировать дисперсию x`i, и мы хотим найти u1, которое является направлением максимальной дисперсии

В следующей части мы увидим альтернативную формулировку PCA и ее ограничения.

Не стесняйтесь отвечать в разделе комментариев.

А пока желаю удачи!

Редактировать:
Ссылка на Часть-3 сериала
Ссылка на Часть-4 сериала