www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Универсальный магазин для анализа основных компонентов

Дата публикации Apr 17, 2017

В началеучебник, который я использовал для моей теории стата выпускникаНа уроке авторы (Джордж Казелла и Роджер Бергер) объяснили в предисловии, почему они решили написать учебник:

«WЕсли кто-то узнает, что вы пишете учебник, вам будет задан один или оба вопроса. Первый - «Почему ты пишешь книгу?», А второй - «Чем твоя книга отличается от того, что там есть?». На первый вопрос довольно легко ответить. Вы пишете книгу, потому что не полностью удовлетворены доступными текстами ».

Я применяю логику авторов здесь. Принципиальный компонентный анализ (PCA) - это важный метод, который нужно понимать в области статистики и науки о данных… но когда я собираю урок для моегоГенеральная Ассамблеястуденты, я обнаружил, что онлайн-ресурсы были слишком техническими, не полностью отвечали нашим потребностям и / или предоставляли противоречивую информацию. Можно с уверенностью сказать, что я не «полностью удовлетворен доступными текстами» здесь.

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

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


Что такое PCA?

Допустим, вы хотите предсказать, чтоВаловый Внутренний Продукт(ВВП) США будет на 2017 год. У вас есть много доступной информации: ВВП США за первый квартал 2017 года, ВВП США за весь 2016, 2015 годы и т. Д. У вас есть общедоступный экономический показатель, такой как уровень безработицы, уровень инфляции и так далее. У вас есть данные переписи населения США за 2010 год, оценивающие, сколько американцев работают в каждой отрасли иИсследование американского сообществаданные обновляют эти оценки между каждой переписью. Вы знаете, сколько членов Палаты и Сената принадлежит каждой политической партии. Вы можете собрать данные о ценах на акции, количествоВИСпроисходит через год, исколько генеральных директоровПохоже, что ставить ставку на государственную должность, Несмотря на то, что нужно учитывать огромное количество переменных, этопросто царапает поверхность,

TL; DR- у тебя естьмногопеременных для рассмотрения.

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

Вы можете задать вопрос: «Как мне взять все собранные переменные и сосредоточиться только на нескольких из них?» В технических терминах вы хотите «уменьшить размерность вашего пространственного объекта». Уменьшая размерность. В вашем пространстве пространственных объектов у вас меньше связей между переменными, и вы с меньшей вероятностью перегоните свою модель. (Примечание: это не означает, что переоснащение и т. Д. Больше не является проблемой, но мы движемся в правильном направлении!)

Несколько неудивительно,сокращениеизмерениеПространство объектов называется «уменьшение размерности. »Существует много способов добиться уменьшения размерности, но большинство из этих методов относятся к одному из двух классов:

  • Устранение
  • Функция извлечения

Исключениеэто то, на что это похоже: мы уменьшаем пространство функций, удаляя их. В приведенном выше примере ВВП вместо рассмотрения каждой отдельной переменной мы можем отбросить все переменные, кроме трех, которые, по нашему мнению, лучше всего предскажут, как будет выглядеть валовой внутренний продукт США. Преимущества методов исключения функций включают простоту и поддержание интерпретируемости ваших переменных.

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

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

Вы можете сказать: «Где уменьшение размерности вступает в игру?». Ну, мы оставляем столько новых независимых переменных, сколько хотим, но отбрасываем «наименее важные». Потому что мы упорядочили новые переменные по тому, насколько они хороши. предсказать нашу зависимую переменную, мы знаем, какая переменная является наиболее важной и наименее важной. Но - и вот что важно - поскольку эти новые независимые переменные являются комбинациями наших старых, мы по-прежнему сохраняем наиболее ценные части наших старых переменных, даже когда мы отбрасываем одну или несколько из этих «новых» переменных!

Анализ главных компонентов - это методикаизвлечение признаков- поэтому он комбинирует наши входные переменные особым образом, тогда мы можем отбросить «наименее важные» переменные, сохраняя при этом наиболее ценные части всех переменных!Как дополнительное преимущество, каждая из «новых» переменных после PCA не зависит друг от друга.Это преимущество, потому чтопредположения о линейной моделитребуют, чтобы наши независимые переменные были независимы друг от друга. Если мы решим согласовать модель линейной регрессии с этими «новыми» переменными (см. «Регрессия основного компонента» ниже), это предположение обязательно будет выполнено.

Когда я должен использовать PCA?

  1. Вы хотите уменьшить количество переменных, но не можете определить переменные, чтобы полностью исключить их из рассмотрения?
  2. Вы хотите, чтобы ваши переменные не зависели друг от друга?
  3. Вам удобно делать свои независимые переменные менее понятными?

Если вы ответили «да» на все три вопроса, то PCA - хороший метод для использования. Если вы ответили «нет» на вопрос 3, выне следуетиспользовать PCA.

Как работает PCA?

Раздел после этого обсуждаетЗачемPCA работает, но предоставление краткого резюме, прежде чем переходить к алгоритму, может быть полезно для контекста:

  • Мы собираемся вычислить матрицу, которая суммирует, как все наши переменные связаны друг с другом.
  • Затем мы разберем эту матрицу на два отдельных компонента: направление и величину. Затем мы можем понять «направления» наших данных и их «величину» (или насколько «важны» каждое направление). Скриншот ниже,из апплета setosa.io, отображает два основных направления в этих данных: «красное направление» и «зеленое направление». В этом случае «красное направление» является более важным. Мы разберемся, почему это происходит позже, но, учитывая, как расположены точки, видите ли вы, почему «красное направление» выглядит более важным, чем «зеленое направление»? (Подсказка: как бы выглядела подходящая линия для этих данных?)
Наши исходные данные в плоскости ху. (Источник.)
  • Мы преобразуем наши исходные данные, чтобы они соответствовали этим важным направлениям (которые являются комбинациями наших исходных переменных). Скриншот ниже (опять из setosa.io) те же точные данные, что и выше, но преобразованные так, чтобыИкс- а такжеY-оси теперь «красное направление» и «зеленое направление». Как бы выглядела линия наилучшего соответствия?
Наши оригинальные данные преобразованы в PCA. (Источник.)
  • Хотя визуальный пример здесь двумерный (и, следовательно, у нас есть два «направления»), подумайте о случае, когда наши данные имеют больше измерений. Определив, какие «направления» являются наиболее «важными», мы можем сжать или спроецировать наши данные в меньшее пространство, отбросив «направления», которые являются «наименее важными».Проецируя наши данные в меньшее пространство, мы уменьшаем размерность нашего пространства признаков… но поскольку мы преобразовали наши данные в этих различных «направлениях», мы убедились, что все оригинальные переменные были сохранены в нашей модели!

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

Перед началом работы вы должны иметь табличные данные, организованные сNстроки и скорее всегор + 1столбцы, где один столбец соответствует вашей зависимой переменной (обычно обозначаетсяY) а такжепстолбцы, каждый из которых соответствует независимой переменной (матрица которой обычно обозначаетсяИкс).

  1. ЕслиYпеременная существует и является частью ваших данных, а затем разделить ваши данные наYа такжеИкскак определено выше - мы в основном будем работать сИкс (Примечание: если столбца дляYничего страшного - переходи к следующему пункту!)
  2. Взять матрицу независимых переменныхИкси для каждого столбца вычтите среднее значение этого столбца из каждой записи. (Это гарантирует, что каждый столбец имеет среднее значение ноль.)
  3. Решите, стоит ли стандартизировать. Учитывая столбцыИксявляются ли признаки с более высокой дисперсией более важными, чем объекты с более низкой дисперсией, или важность функций не зависит от дисперсии? (В этом случае важность означает, насколько хорошо эта функция предсказываетY.)Если важность признаков не зависит от дисперсии признаков, то разделите каждое наблюдение в столбце на стандартное отклонение этого столбца.(Это, в сочетании с шагом 2, стандартизирует каждый столбецИксчтобы убедиться, что каждый столбец имеет среднее значение ноль и стандартное отклонение 1.) Вызов центрированной (и, возможно, стандартизированной) матрицыZ,
  4. Взять матрицуZ,перенести егои умножить транспонированную матрицу наZ, (Записывая это математически, мы бы написали это какZZ.) Полученная матрицаковариационная матрицаZс точностью до константы.
  5. (Вероятно, это самый сложный шаг для подражания - оставайтесь со мной здесь.) Рассчитайте собственные векторы и их соответствующие собственные значенияZZ, Это довольно легко сделать в большинстве вычислительных пакетов - на самом деле,eigendecompositionизZZгде мы разлагаемZZвPDPWhere гдепявляется матрицей собственных векторов иDявляется диагональной матрицей с собственными значениями на диагонали и значениями нуля во всех остальных местах. Собственные значения на диагоналиDбудет связан с соответствующим столбцом вп- то есть первый элементDявляется λ₁ и соответствующий собственный вектор является первым столбцомп, Это верно для всех элементов вDи их соответствующие собственные векторы вп, Мы всегда сможем рассчитатьPDPThis таким образом. (Бонус: для тех, кто заинтересован, мы всегда можем рассчитатьPDPBecause таким образом, потому чтоZZэтосимметричный,положительная полуопределенная матрица.)
  6. Возьмем собственные значения λ₁, λ₂,…, λпи сортировать их от самых больших до самых маленьких. При этом сортировать собственные векторы впсоответственно. (Например, если λ₂ является наибольшим собственным значением, возьмите второй столбецпи поместите его в первую позицию столбца.) В зависимости от вычислительного пакета это может быть сделано автоматически. Назовите эту отсортированную матрицу собственных векторовП*, (СтолбцыП*должны быть такими же, как столбцып, но, возможно, в другом порядке.)Обратите внимание, что эти собственные векторы не зависят друг от друга.
  7. РассчитатьZ *знак равноZP *, Эта новая матрица,Z *является центрированной / стандартизированной версиейИксно теперь каждое наблюдение является комбинацией исходных переменных, где веса определяются собственным вектором.В качестве бонуса, потому что наши собственные векторы вП*независимы друг от друга, каждый столбецZ *также не зависит друг от друга!
Пример изsetosa.ioгде мы преобразуем пять точек данных, используя PCA. Левый график - это наши исходные данные.Икс; правильный график будет нашими преобразованными даннымиZ *,

Обратите внимание на две вещи на этом рисунке:

  • Две диаграммы показывают те же самые данные, но правый график отражает исходные данные, преобразованные таким образом, что наши оси теперь являются основными компонентами.
  • На обоих графиках главные компоненты перпендикулярны друг другу.Фактически, каждый основной компонент ВСЕГДА будетортогональный(a.k.a. официальный математический термин для перпендикуляра)каждому другому главному компоненту.(Не верите мне?Попробуй сломать апплет!)

Поскольку наши главные компоненты ортогональны друг другу, они статистически линейно независимы друг от друга ... вот почему наши столбцыZ *линейно независимы друг от друга!

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

  • Способ 1: Мы произвольно выбираем, сколько измерений мы хотим сохранить. Возможно, я хочу визуально представлять вещи в двух измерениях, поэтому я могу сохранить только две особенности. Это зависит от варианта использования, и не существует строгого правила относительно количества функций, которые я должен выбрать.
  • Способ 2: Рассчитатьпропорция объясняется(кратко объяснено ниже) для каждой функции, выберите порог и добавляйте функции, пока не достигнете этого порога. (Например, если вы хотите объяснить 80% от общей изменчивости, возможно, объясненной вашей моделью, добавляйте функции с наибольшей объясненной долей отклонения, пока ваша доля отклонения объясненных совпадений не превысит 80% )
  • Способ 3: Это тесно связано со способом 2. Рассчитатьпропорция объясняетсядля каждого объекта сортируйте элементы по объясненной пропорции отклонения и наносите на график совокупную долю объяснения, по мере того как вы сохраняете больше объектов. (Этот сюжет называетсязаговор, показано ниже.) Можно указать, сколько объектов следует включить, указав точку, в которой добавление нового объекта имеет существенное снижение дисперсии, объясненное относительно предыдущего объекта, и выбрав объекты до этой точки. (Я называю это методом «найди колено», так как взгляд на «изгиб» или «колено» на графике осыпи определяет, где происходит наибольшее падение доли объясненной дисперсии.)

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

Scree Plot для генетических данных. (Источник.)

Рассмотрим этот участок осыпей для генетических данных. (Источник:Вот.) Красная линия указывает долю дисперсии, объясняемой каждым признаком, которая рассчитывается путем взятия собственного значения этого основного компонента, деленного на сумму всех собственных значений. Отношение отклонений, объясняемое включением только главного компонента 1, равно λ₁ / (λ₁ + λ₂ +… + λп), что составляет около 23%. Отношение отклонений, объясняемое включением только главного компонента 2, равно λ₂ / (λ₁ + λ₂ +… + λп) или около 19%.

Отношение дисперсии, объясненное включением обоих главных компонентов 1 и 2, составляет (λ₁ + λ₂) / (λ₁ + λ₂ +… + λп), что составляет около 42%. Это где желтая линия приходит; желтая линия указывает совокупную долю дисперсии, объясненную, если вы включили все основные компоненты до этого момента. Например, желтая точка над PC2 указывает, что включение основных компонентов 1 и 2 объясняет около 42% общей дисперсии в модели.

Теперь давайте рассмотрим несколько примеров:

  • Метод 1: Мы произвольно выбираем ряд основных компонентов для включения. Предположим, я хотел сохранить пять основных компонентов в моей модели. В приведенном выше случае генетических данных эти пять основных компонентов объясняют около 66% общей изменчивости, что объясняется включением всех 13 основных компонентов.
  • Метод 2: Предположим, я хотел включить достаточное количество основных компонентов, чтобы объяснить 90% общей изменчивости, объясняемой всеми 13 основными компонентами. В приведенном выше случае с генетическими данными я бы включил первые 10 основных компонентов и исключил три последние переменные изZ *,
  • Метод 3: Здесь мы хотим «найти локоть». На приведенном выше графике осыпей мы видим, что большая доля изменчивости объясняется между основным компонентом 2 и основным компонентом 3. В этом случае мы, вероятно, включим первые две функции и отбросьте остальные функции. Как вы можете видеть, этот метод немного субъективен, так как «колено» не имеет математически точного определения, и в этом случае мы включили бы модель, которая объясняет только около 42% общей изменчивости.

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

Как только мы удалили преобразованные переменные, которые мы хотим удалить, мы сделали! Это PCA.

Но типа * почему * работает PCA?

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

  • Во-первых, ковариационная матрицаZZэто матрица, которая содержит оценки того, как каждая переменная вZотносится к любой другой переменной вZ, Понимание того, как одна переменная связана с другой, является достаточно мощным.
  • Во-вторых, собственные значения и собственные векторы важны. Собственные векторы представляют направления. Подумайте о том, чтобы вывести свои данные на многомерную диаграмму рассеяния. Тогда можно думать об отдельном собственном векторе как о конкретном «направлении» в вашем графике рассеяния данных. Собственные значения представляют величину или важность. Большие собственные значения коррелируют с более важными направлениями.
  • Наконец, мы предполагаем, что большая изменчивость в определенном направлении коррелирует с объяснением поведения зависимой переменной. Большая изменчивость обычно указывает на сигнал, тогда как небольшая изменчивость обычно указывает на шум. Таким образом, большая изменчивость в определенном направлении теоретически указывает на то, что мы хотим обнаружить. (Thesetosa.io PCA апплетотличный способ поиграть с данными и убедить себя, почему это имеет смысл.)

Таким образом, PCA - это метод, который объединяет:

  1. Мера того, как каждая переменная связана друг с другом. (Ковариационная матрица.)
  2. Направления, в которых наши данные рассеяны (собственные векторы.)
  3. Относительная важность этих разных направлений. (собственные значения.)

PCA объединяет наши предикторы и позволяет отбросить собственные относительно малозначимые векторы.

Есть ли расширения для PCA?

Да, больше, чем я могу адресовать здесь в разумном количестве места. Тот, который я чаще всего видел, эторегрессия основного компонентагде мы берем наши нетрансформированныеYи регрессировать на подмножествеZ *что мы не упали. (Это где независимость столбцовZ *приходит в; регрессомYнаZ *Мы знаем, что требуемая независимость независимых переменных обязательно будет удовлетворена. Тем не менее, нам нужно будет проверить наши другие предположения.)

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

Вывод

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

Мне сказали, что китайский перевод этой статьи был сделан доступнымВот, (Благодарность,Jakukyo Friel!)

Я хочу поблагодарить моих друзейРитика Бхаскер,Джозеф Нельсон, а такжеКори Смитза их предложения и правки. Вы должны проверить Ритику и Джозефа на Medium - их посты гораздо интереснее, чем мои. (Кори слишком сконцентрирован на том, чтобы не допустить, чтобы его докторская диссертация была ограничена, чтобы иметь среднее присутствие)

Я также хочу датьогромныйч / т кsetosa.io appletдля его визуального и интуитивно понятного отображения PCA.

Редактировать: БлагодаряМайкл Мэтьюздля того, чтобы заметить опечатку в формулеZ *на шаге 7 выше. Он правильно указал, чтоZ *знак равноZP *неZП*, Спасибо такжеЧиенлунг Чунгдля того, чтобы заметить другую опечатку в Шаге 8 выше и отметил, что я связал «собственный вектор» с «собственным значением» в одной строке.


Ресурсы, которые вы должны проверить:

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

Неакадемические статьи и ресурсы

Ресурсы кодирования

Академические учебники и статьи

Тангенциальные ресурсы

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map