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

Понимание всего алгоритма PCA по частям.

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

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

Если мы продолжим увеличивать количество измерений, каждая функция может принимать диапазон возможных значений, поэтому по мере увеличения размеров нам нужно продолжать увеличивать выборки данных, чтобы гарантировать, что есть несколько выборок с каждой комбинацией значений. Обычно по мере увеличения размеров количество выборок, необходимых для хорошего прогноза, увеличивается логарифмически. В реальном мире наборы данных имеют тысячи функций, поэтому объем данных, который нам нужен для того, чтобы идти в ногу с растущими измерениями, становится огромным (2¹⁰⁰⁰), что, с другой стороны, резко увеличивает время обучения, если мы продолжаем увеличивать размеры и не увеличивайте количество образцов, тогда наши алгоритмы машинного обучения имеют тенденцию переоснащаться и их производительность снижается.

Одна из таких идей, которая описывает поведение данных в многомерном пространстве и проблемы, возникающие при анализе многомерных данных, называется проклятием размерности. Давайте рассмотрим наше многомерное пространство как гиперкуб, теперь в соответствии с проклятием размерности, когда измерения увеличиваются, объем пространства увеличивается так быстро, что доступные данные становятся разреженными. После определенного момента данные становятся настолько разреженными, что точная оценка параметров классификатора становится более сложной. На самом деле данных вокруг начала координат намного меньше, чем данных в углах. Большая часть данных в более высоких измерениях сосредоточена в углах гиперкуба, например если у нас есть набор данных 10D, то большая часть данных сосредоточена в (2¹⁰ = 1024) 1024 углах гиперкуба.

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

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

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

PCA Intuition.

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

На приведенном выше рисунке показаны две функции F1 и F2, нанесенные в двухмерном пространстве. Как видно из графика выше, дисперсия признака F2 намного выше, чем дисперсия признака F1, что означает

информация, сохраненная F2 ›› информация, сохраненная F1

Теперь предположим, что мы хотим преобразовать эти 2D-данные в 1D, нам нужно отбросить одну функцию. Мы знаем, что функция F1 сохраняет гораздо меньше информации, чем F2, поэтому мы можем спокойно отказаться от функции F1 и использовать функцию F2 в качестве последней функции.

А теперь давайте посмотрим на еще один сюжет.

Здесь дисперсия признака F2 равна дисперсии признака F1, что означает

Информация, сохраняемая F2 = информация, сохраняемая F1

Теперь, если мы хотим уменьшить размеры данных с 2D до 1D, мы не можем отбросить одну функцию, так как мы теряем много информации.

Итак, что мы можем здесь сделать?

Здесь на помощь приходит PCA

PCA выполняет линейное ортогональное преобразование данных, чтобы найти признаки F1 ’и F2’, так что отклонение F1 ’›› отклоняется от F2’.

Что означает линейное ортогональное преобразование?

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

Эти новые наборы функций называются основными компонентами. Здесь F1 ’- это первый главный компонент, который дает направление максимальной дисперсии, а F2 '- второй главный компонент, который дает второе направление с наибольшим отклонением. F1 ’и F2’ - единичные векторы, и они перпендикулярны друг другу. Поскольку F1 ’и F2’ - это наш новый набор функций, мы можем безопасно отказаться от F2 ’, поскольку F1’ сохраняет максимум информации.

PCA пытается найти направление F1 ’так, чтобы дисперсия точки X, проецируемой на F1’, была максимальной.

Здесь

Xi = точка данных

u1 = единичный вектор в направлении максимальной дисперсии

Xi ’= проекция Xi на u1

На приведенном выше графике мы видим, что красный вектор дает направление максимальной дисперсии. Зеленые точки - это исходные точки данных, а красные точки - проекции этих точек на ось.

До сих пор мы рассматривали базовую интуицию PCA. Теперь давайте посмотрим на математику, лежащую в основе PCA.

PCA MATHS.

Интерпретация собственных значений ƛ.

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

СЛУЧАЙ 1:

СЛУЧАЙ 2:

СЛУЧАЙ 3:

СЛУЧАЙ 4:

Как видно из графиков выше, в 4-м случае, если мы отбрасываем одну функцию, мы теряем 50% информации, что нежелательно.

Итак, здесь мы можем сказать, что, если ƛ1 ›› ƛ2 (случаи 1 и 2), мы можем эффективно преобразовать из 2D в 1D, поскольку сохраняется максимум информации.

Здесь% объясненного отклонения =% сохраненной информации

Vi = направление максимальной дисперсии

ƛi = Каков разброс (дисперсия) данных по каждой оси

Код для PCA.

Теперь давайте посмотрим на код для PCA. Мы будем использовать модуль PCA в python из библиотеки scikit-learn. Чтобы использовать модуль, нам нужно импортировать его, используя -

«from sklearn.decomposition import PCA»

Здесь мы собираемся использовать набор данных радужной оболочки, доступный в scikit-learn.

Набор данных радужной оболочки имеет 4 характеристики: Длина чашелистика, ширина чашелистика, длина лепестка, ширина лепестка.

Поскольку это четырехмерные данные, мы не можем их визуализировать. Давайте преобразуем данные с помощью PCA и сократим данные до двух измерений. Здесь, после применения PCA, мы получим 4 основных компонента, мы выберем 2 верхних основных компонента, чтобы понять и визуализировать, как PCA преобразует данные и какая дисперсия сохраняется после выбора только двух основных компонентов.

Итак, приступим!

Сначала загрузим данные как фрейм данных Pandas.

Как мы видим, набор данных радужной оболочки имеет 4 функции и 150 точек данных.

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

Как мы видим, за исключением длины лепестка и ширины чашелистика, наши переменные характеристик сильно коррелированы, поэтому мы можем сказать, что PCA отлично работает с данными.

Теперь наш первый шаг - стандартизировать данные, т.е. mean = 0, для этого мы будем использовать модуль standardcaler из библиотеки scikit-learn.

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

Как мы видим, после преобразования PCA мы получаем 4 главных компонента, поскольку количество главных компонентов равно количеству функций. Здесь первый главный компонент, то есть столбец 0 в кадре данных, дает направление максимальной дисперсии.

Теперь давайте посмотрим на собственные значения ковариационной матрицы наших данных. Собственные значения могут быть заданы как pca.explained_variance_. Здесь первое собственное значение объясняет максимальную дисперсию.

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

Как мы видим, процент отклонения, объясняемый первым главным компонентом, является самым высоким, то есть 73%, за ним следует второй главный компонент, то есть 23%, а последний главный компонент объясняет наименьшее отклонение, то есть 1%.

мы можем видеть, что просто используя первые два основных компонента, мы можем легко сохранить 95% общей дисперсии, поэтому мы можем смело отбросить последние два компонента, поскольку они просто объясняют 5% общей дисперсии.

Итак, наконец, мы преобразовали наши четырехмерные данные в двухмерные с помощью PCA. Теперь, прежде чем мы визуализируем наши преобразованные двухмерные данные, давайте попробуем интерпретировать эти основные компоненты. Основные компоненты - это вновь сформированные функции, которые мы получаем после ортогонального линейного преобразования наших исходных данных, но необходимо понимать, какие функции из наших исходных данных больше всего повлияли на эти основные компоненты, поскольку интерпретируемость очень важна в машинном обучении. Чтобы понять это, мы можем использовать pca.components_, который сообщает нам, насколько каждая функция повлияла на наш основной компонент. Здесь мы смотрим на абсолютные значения компонентов собственного вектора. Чем больше эти абсолютные значения, тем больше конкретная функция вносит вклад в этот главный компонент.

Теперь давайте нанесем эти значения на график, чтобы лучше визуализировать и понять

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

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

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

Из приведенного выше графика видно, что на главный компонент 1 сильно влияет длина чашелистника, ширина лепестка и длина лепестка, а на главный компонент 2 сильно влияет ширина чашелистника.

Здесь длина лепестка имеет наибольшее влияние на ПК1, а ширина чашелистика имеет наибольшее влияние на ПК2. Теперь, прежде чем мы визуализируем наши основные компоненты, давайте визуализируем эти две функции из нашего исходного набора данных, прежде чем применять преобразование PCA и сравнить два графика.

Как мы видим из графиков выше, большая часть распределения точек данных из исходных данных сохраняется, и все три класса хорошо разделены, поэтому мы, наконец, можем сказать, что PCA очень хорошо справился с преобразованием наших данных из 4D. в 2D без потери большого количества информации.

Ограничения PCA.

PCA - один из самых простых и фундаментальных методов уменьшения размерности. Он отлично работает с данными, если переменные функций сильно коррелированы, но у него есть свои ограничения. Существуют различные варианты алгоритма PCA, такие как ядро ​​PCA, для преодоления некоторых из этих ограничений.

Давайте посмотрим на некоторые случаи, когда PCA терпит неудачу:

СЛУЧАЙ 1:

Здесь ƛ1 = ƛ2, поэтому, если мы отбросим какую-либо одну функцию, потеря информации будет очень высокой, мы потеряем около 50% всей информации, что нежелательно.

СЛУЧАЙ 2:

PCA не принимает во внимание локальную структуру данных. Здесь оба кластера C1 и C2 будут проецироваться в одной и той же области на V1, поэтому нелегко понять, к какому классу принадлежат точки при преобразовании из 2D в 1D.

СЛУЧАЙ 3:

PCA основывается на линейных предположениях, то есть предполагает, что данные линейно коррелированы, но если данные нелинейно коррелированы, PCA недостаточно.

Здесь данные имеют красивую нелинейную структуру. Теперь, если мы спроецируем все точки на V1 для преобразования данных из 2D в 1D, мы потеряем всю структуру данных.

Заключение.

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

— — — — — — — -

Спасибо, что прочитали эту статью. По любым предложениям или вопросам, пожалуйста, оставьте комментарий.

Использованная литература.