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

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

Здравствуйте! Я Нандини Тенгли, студентка колледжа, специализирующаяся на компьютерных науках. Это мой блог CS, в котором я стараюсь документировать то, что узнаю, максимально не используя жаргоны. Если вы похожи на меня и любите копать глубже, чтобы получить хорошее представление о вещах, но в конечном итоге тратите часы, просто пытаясь расшифровать документацию, то вы попали по адресу.

Ссылки на все ресурсы внизу статьи!

С чем вам нужно ознакомиться, прежде чем пытаться понять математику, лежащую в основе PCA:

  • собственное разложение
  • Линейное преобразование

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

Анализ главных компонентов

Несмотря на то, что PCA широко известен как метод уменьшения размерности, он не совсем точен.

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

Но что такое линейное преобразование?

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

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

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

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

Способ, которым PCA фактически придумывает этот новый набор измерений, заключается в максимизации «разброса» или дисперсии данных. Интуиция, стоящая за этим, такова: если наш набор данных имеет хорошие измерения (минимальный шум), мы предполагаем, что направления наибольшей дисперсии охватывают наиболее интересные закономерности/динамику (сигналы) в наших данных. Таким образом, изменение нашей системы отсчета — нашей основы — для согласования с направлениями наибольшей дисперсии позволяет нам лучше анализировать/изучать эти закономерности в наших данных.

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

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

«Полезность» алгоритма PCA основана на дисперсии. Он упорядочивает измерения — основные компоненты — по величине дисперсии, которую они фиксируют. Первое измерение — первый главный компонент — будет направлено на самые разнообразные данные. Второй главный компонент должен быть ортогонален (перпендикулярен) первому главному компоненту и в направлении второй по величине дисперсии. Это повторяется, чтобы найти другие главные компоненты. Мы ограничиваем каждый новый главный компонент ортогональностью ко всем предыдущим компонентам, поскольку это позволяет нам использовать преимущества линейной алгебры.

Есть несколько способов выполнить PCA с помощью Python:

  • Модуль декомпозиции Sklearn. Это самый простой метод выполнения PCA.
  • С нуля: использование ковариационной матрицы и собственное разложение: лучший способ понять математику алгоритма
  • Разложение по сингулярным значениям: еще один отличный метод линейной алгебры, который позволяет нам пропустить пару шагов!

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

Алгоритм:

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

На этом этапе ваши данные готовы к использованию с модулем декомпозиции Skearn и выполнением PCA.

  • Найдите ковариационную матрицу данных. Ковариационная матрица — это способ «закодировать» взаимосвязь между различными атрибутами в данных. Это матрица, которая записывает ковариации каждой возможной пары атрибутов/размеров. Ковариационная матрица будет рассмотрена чуть позже в этой статье.
  • найти собственные векторы и собственные значения ковариационной матрицы
  • полученные собственные векторы являются нашими главными компонентами
  • Собственные значения дают нам указание на величину дисперсии, описываемой собственными векторами — главными компонентами
  • выберите количество основных компонентов, которые необходимо сохранить, если вы намерены уменьшить размерность набора данных.
  • Примените преобразование к центрированной матрице данных!

Матрица PCA:

матрица PCA: мы собираемся назвать нашу матрицу данных X.

  • Строки матрицы данных соответствуют измерениям одного эксперимента.
  • Столбцы матрицы данных соответствуют каждому из измеряемых признаков.

Если бы наши данные состояли из информации о странах: строки соответствовали бы разным странам, о которых мы собираем данные, а столбцы соответствовали бы характеристикам, которые мы собираем для каждой страны: название, ВВП, население и так далее.

Исследование

Мы собираемся использовать python для изучения алгоритма. Я сделал это, используя блокноты Jupyter. У меня есть ссылка на файл внизу, если вы хотите скачать его и следовать!

Давайте импортируем все необходимые библиотеки.

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

  • cov_mat: ковариационная матрица для этого распределения (ковариационная матрица немного объяснена)
  • среднее значение: среднее значение распределения
  • размер: количество точек данных для создания

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

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

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

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

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

Ковариационная матрица, C, содержит ковариацию между каждой возможной парой атрибутов/функций в нашем наборе данных: для этого набора данных с двумя функциями (x, y) ковариационная матрица имеет вид 2X2 с четырьмя элементами. . Естественно, диагональные записи в ковариационной матрице охватывают дисперсии каждого из признаков/размеров. Недиагональные элементы фиксируют ковариацию каждого признака с любым другим признаком.

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

Таким образом, PCA стремится найти матрицу преобразования (A) для преобразования нашей (центрированной) матрицы данных (Z) таким образом, чтобы результирующая матрица Z_pca имела диагональную ковариационную матрицу.

Линейная алгебра позволяет очень просто найти такую ​​матрицу преобразования. Оказывается, собственные векторы нашей ковариационной матрицы Z (среднецентрированные данные) дают нам такое преобразование.

Вот картинка краткого доказательства:

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

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

Следовательно, упорядочивание собственных векторов в порядке убывания их соответствующих собственных значений даст нам идеальную матрицу преобразования.

что такое собственные векторы?

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

И вот мы закончили!!

Мы видим, что данные теперь отображаются относительно собственных векторов (главных компонентов) на изображении ___. Подводя итог трансформации:

  • Сначала мы перевели данные, вычитая среднее значение из данных
  • Затем мы повернули данные на угол, необходимый для выравнивания оси главного компонента (собственных векторов) с осями x, y по умолчанию.

Связь между ППШ и СВД

Другой способ выполнить PCA — воспользоваться его связью с декомпозицией по единичным значениям (SVD). Используя этот подход, мы можем пропустить несколько шагов!

Не беспокойтесь, если вы раньше не применяли SVD, вы все равно можете выполнить часть сжатия изображений. Важно понимать ковариационную матрицу сверху, что помогает нам понять интуицию, лежащую в основе работы PCA.

Что такое разложение по единственному значению?

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

SVD нашей матрицы Z разлагает матрицу следующим образом:

V — ортогональная матрица, столбцы которой являются собственными векторами Z.T * Z .

Следовательно, векторы-столбцы V являются собственными векторами C, нашей ковариационной матрицы!

Следовательно, строки V.T дают нам главные компоненты! V.T — наша матрица трансформации!

Вы можете использовать приведенный ниже код, чтобы доказать, что это правда!

Сингулярные значения, масштабированные как 1\sqrt(n-1), измеряют дисперсию, захваченную каждым из основных компонентов.

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

Чтобы определить отношение того, сколько дисперсии охватывает Kколичество основных компонентов:

где s_i — i-е сингулярное значение, k — количество сохраняемых компонентов, а N — общее количество основных компонентов.

Для дальнейшего изучения этого метода мы собираемся сжать изображение, полученное с космического телескопа Джеймса Уэбба.

Обязательно загрузите это изображение и сохраните его в текущем рабочем каталоге/папке.

Форма массива:

  • у нас три 4501 X 4833
  • Каждая из трех матриц соответствует красному, зеленому и синему каналам изображения.

Разделяем три матрицы. Каждая матрица (цветовой канал) будет обрабатываться отдельно.

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

Следующим шагом является среднее центрирование данных:

  • вычислить среднюю строку для каждой матрицы
  • вычесть соответствующие «средние строки» из всех остальных строк в каждой из этих матриц

Теперь мы выполняем разложение по сингулярным значениям для каждой из матриц Z вместо вычисления ковариационной матрицы. Это позволяет нам пропустить несколько шагов.

Строки Vtr, Vtg и Vtb являются основными компонентами соответствующих наборов данных. Они упорядочены по убыванию дисперсии.

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

Теперь мы можем использовать это изображение, чтобы продемонстрировать классный вариант использования PCA: уменьшение размерности (сжатие изображения). Для этого мы должны решить, сколько основных компонентов мы хотим сохранить. Мы можем решить это, посмотрев на отношение суммы K сингулярных значений к сумме всех сингулярных значений, как определено ранее. Мы также можем посмотреть на него и поиграть с количеством основных компонентов, пока не будем удовлетворены окончательным (несжатым) изображением.

Это изображение из 400 основных компонентов, которые мы сохранили! 400 главных компонент сохранили 80% дисперсии в соответствии с отношением сингулярных значений.

Полученное изображение:

Хотя существуют более эффективные методы сжатия изображений, это интересный способ продемонстрировать одно из самых популярных применений PCA: уменьшение размерности.

Резюме:

  • PCA — это метод преобразования данных.
  • Идея состоит в том, чтобы лучше понять наши данные, используя другую систему координат.
  • PCA очень полезен для уменьшения размерности, особенно если вы не хотите явно удалять какие-либо исходные атрибуты.
  • PCA выбирает новый набор измерений/осей на основе направлений отклонений в ваших данных.
  • Дисперсия фиксируется матрицей ковариации.
  • Собственное разложение матрицы ковариации приводит к новому набору измерений — главных компонент.
  • Главные компоненты линейно независимы и ортогональны друг другу. Они также упорядочены от наиболее важного к наименее важному в зависимости от величины дисперсии, которую они фиксируют.

Ресурсы для дополнительного изучения/исследования