Добавить в корзинуПозвонить
Найти в Дзене
LabelMe

Краткое руководство по извлечению признаков и уменьшению размерности

Что выбрать PCA или LDA. Разбираемся во всех плюсах и минусах.
Оглавление

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

Исправить это позволяют алгоритмы уменьшения размерности. Их главная задача - уменьшить количество рассматриваемых случайных признаков. Они выделяют только самые важные и влияющие на точность предсказания характеристики. Как это сделать? Какие алгоритмы и методы могут помочь? Ответы на эти и другие вопросы уже есть в нашей новой статье.

Основные способы уменьшение размерности

Уменьшение размерности можно осуществить двумя способами:

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

  • PCA(Principal Component Analysis)
  • LDA(Linear Discriminant Analysis)

2. Выбор функций (Feature Selection), сохраняя только самые релевантные переменные из исходного набора данных:

  • Корреляции
  • Коэффициент пропущенных значений
  • Forward Selection
  • Backward Elimination
  • Select K Best

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

-2

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

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

PCA (анализ главных компонентов)

Мы уже писали о работе с PCA раньше, но вкратце напомним. Principal Component Analysis - метод получения основных и самых важных переменных (в форме компонентов) из всего массива набора данных. Он стремится найти направление максимального разброса данных. PCA более полезен при работе с трехмерными данными или более многомерными данными.

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

Порядок действий следующий:

  1. Стандартизируйте данные (X_std)
  2. Вычислить ковариационную матрицу
  3. Вычислите собственный вектор и собственные значения для ковариационной матрицы
  4. Расположите все собственные значения в порядке убывания.
  5. Нормализуйте отсортированные собственные значения.
  6. По горизонтали сложите Normalized_ Eigenvalues ​​= W_matrix
  7. X_PCA=X_std .dot (W_matrix)
-3

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

Главный компонент - это нормализованная линейная комбинация исходных функций в датасете.

Первый главный компонент (PC1) всегда будет в направлении максимального изменения, а затем последуют другие PC.

-4

Отметим, что все главные компоненты будут перпендикулярны друг другу. Объяснить это можно тем, что так никакая информация, представленная в PC1, не будет присутствовать на PC2.

PCA с использованием Python

Мы использовали набор данных Wine и реализовали PCA вместе с логистической регрессией с последующей настройкой гиперпараметров:

  • Сначала мы стандартизируем данные и применяем PCA. Затем создаем график с результатом, чтобы проверить отделимость.
-5
  • Затем применяем логистическую регрессию и строим график с помощью границы решения для данных обучения и теста.
-6
  • Настраиваем гиперпараметры с помощью конвейера, чтобы найти главные компоненты с лучшими результатами тестов.
-7

Ядро PCA (Kernel PCA)

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

Здесь нам на помощь приходит Kernel PCA. Он похож на SVM в том смысле, что реализует Kernel–Trick для преобразования нелинейных данных в более высокое измерение, где они разделимы.

На приведенном выше рисунке мы видим, что PCA не может разделять нелинейные данные, но с помощью Kernel -PCA он может разделять данные на классы.
На приведенном выше рисунке мы видим, что PCA не может разделять нелинейные данные, но с помощью Kernel -PCA он может разделять данные на классы.

Недостатки Principal Component Analysis

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

-9

LDA (Linear Discriminant Analysis)

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

-10

Сейчас мы кратко объясним их главные отличия:

  • LDA - контролируемый алгоритм, PCA - нет.
  • LDA - описывает направление максимальной разделимости данных. PCA - описывает направление максимальной дисперсии данных.
  • LDA требует информации о метке класса, в отличие от PCA.

LDA с использованием Python

Рассмотрим пошагово все этапы:

  • Стандартизация данных и применение LDA
  • Применение линейной модели, например, логистическую регрессию, чтобы подогнать данные. Затем, для проверки разделения классов, строит карту границ принятия решений.
-11

Примечание: мы видим, что LDA - это линейная модель, и передача выходных данных одной линейной модели другой не приносит никакой пользы. Лучше попробовать передать вывод линейной модели в нелинейную. Из приведенного выше рисунка мы смогли достичь точности 100% для данных обучения и 98% для данных испытаний.

  • Используем нелинейную модель (SVM), чтобы проверить описанную теорию:
-12

Графики показывают, что мы смогли достичь 100% точности как для тестовых, так и для обучающих данных. Таким образом, мы видим, что передача линейных входных данных в нелинейную модель более выгодна.

Заключение

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

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

Код уменьшения размерности в Python - здесь.

Другие наши статьи:

-13