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

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

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

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

(1) Вычислить ковариационную матрицу данных.

(2) Вычислить собственные значения и векторы этой ковариационной матрицы.

(3) Используйте собственные значения и векторы, чтобы выбрать только самые важные векторы признаков, а затем преобразуйте свои данные в эти векторы для уменьшения размерности!

Весь процесс проиллюстрирован на рисунке выше, где наши данные были преобразованы из трехмерного пространства из 1000 точек в двухмерное пространство из 100 точек. Это 10-кратная экономия на вычислениях!

(1) Вычисление ковариационной матрицы

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

Ковариация двух переменных измеряет, насколько они «коррелированы». Если две переменные имеют положительную ковариацию, то при увеличении одной переменной увеличивается и другая; при отрицательной ковариации значения переменных признаков изменятся в противоположных направлениях. Тогда ковариационная матрица представляет собой просто массив, где каждое значение определяет ковариацию между двумя характеристическими переменными на основе положения x-y в матрице. Формула:

Где x с линией наверху - это вектор средних значений для каждой характеристики X. Обратите внимание, что когда мы умножаем транспонированную матрицу на исходную, мы в конечном итоге умножаем каждую из характеристик для каждых данных. указать вместе! В numpy-коде это выглядит так:

(2) Вычисление собственных значений и векторов

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

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

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

(3) Проекция на новые векторы

На данный момент у нас есть список собственных векторов, отсортированных в порядке «важности» для нашего набора данных на основе их собственных значений. Теперь мы хотим выбрать наиболее важные векторы функций, которые нам нужны, и отбросить остальные. Мы можем сделать это разумным способом, посмотрев на объясненный процент отклонения векторов. Этот процент количественно определяет, сколько информации (дисперсии) можно отнести к каждому из основных компонентов из всех 100%.

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

[12, 10, 8, 7, 5, 1, 0.1, 0.03, 0.005, 0.0009]

Общая сумма этого массива = 43,1359. Но первые 6 значений представляют:

42 / 43,1359 = 99,68% от суммы! Это означает, что наши первые 5 собственных векторов эффективно содержат 99,68% дисперсии или информации о нашем наборе данных. Таким образом, мы можем отбросить последние 4 вектора признаков, поскольку они содержат только 0,32% информации, что является достойной жертвой для экономии 40% вычислений!

Следовательно, мы можем просто определить порог, по которому мы можем решить, оставить или отбросить каждый вектор признаков. В приведенном ниже коде мы просто подсчитываем количество векторов признаков, которые мы хотели бы сохранить, на основе выбранного порогового значения 97%.

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

Вуаля! Размеры уменьшены!

Любите учиться?

Следуйте за мной в твиттере, где я публикую все о новейших и величайших достижениях искусственного интеллекта, технологий и науки! Свяжитесь со мной и в LinkedIn