Часть 5: Объединение методов выбора фильтра, оболочки и встроенных функций

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

Примечание. Как следует из названия этой части серии, мы будем комбинировать несколько методов из частей 1–4. Я настоятельно рекомендую прочитать эти части, прежде чем работать над этим сообщением.

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

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

Гибридные методы: определение

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

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

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

Гибридные методы: преимущества

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

  • Высокая производительность и точность
  • Лучшая вычислительная сложность, чем у методов-оберток
  • Модели, которые являются более гибкими и устойчивыми к многомерным данным

Гибридные методы: процесс

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

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

Использование методов Filter & Wrapper

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

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

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

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

Использование встроенных методов и методов оболочки

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

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

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

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

Рекурсивное исключение признаков

Это просто причудливое название для простого метода, который работает следующим образом:

  1. Обучите модель всем функциям данных. Эта модель может быть древовидной моделью, лассо, логистической регрессией или другими, которые могут предлагать важность функций. Оцените его производительность по подходящей метрике по вашему выбору.
  2. Определите важность функции для соответствующего ранжирования функций.
  3. Удалите наименее важный элемент и заново обучите модель оставшимся.
  4. Используйте предыдущую метрику оценки, чтобы рассчитать производительность полученной модели.
  5. Теперь проверьте, уменьшается ли метрика оценки на произвольный порог (вы также должны определить это). Если это так, это означает, что эта функция важна. В противном случае вы можете удалить его.
  6. Повторяйте шаги 3–5, пока все функции не будут удалены (т. Е. Оценены).

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

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

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

Вот пример кода, который работает с RandomForestClassifier для выбора лучших функций:

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

  • min_feature_to_select: Как следует из названия, этот параметр устанавливает минимальное количество выбираемых функций.
  • step: Сколько функций мы удаляем на каждом этапе.
  • cv: целое число, генератор или итерация, описывающая стратегию разделения при перекрестной проверке.
  • scoring: Используемая нами метрика оценки.

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

Рекурсивное добавление функций

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

  1. Обучите модель на всех данных и определите важность функции для ее соответствующего ранжирования. Эта модель может быть древовидной моделью, лассо, логистической регрессией или другими, которые могут предлагать важность функций.
  2. Из этой исходной модели создайте другую с наиболее важной характеристикой и оцените ее с помощью метрики оценки по вашему выбору.
  3. Добавьте еще одну важную функцию и используйте ее для повторного обучения модели вместе с любой функцией из предыдущего шага.
  4. Используйте предыдущую метрику оценки, чтобы рассчитать производительность полученной модели.
  5. Теперь проверьте, увеличивается ли метрика оценки на произвольно установленный порог (вы также должны определить это). Если это так, значит, эта функция важна; в противном случае мы можем удалить его.
  6. Повторяйте шаги 3–5, пока все функции не будут добавлены (т. Е. Оценены).

Разница между этим методом и пошаговым выбором функций аналогична тому, что мы обсуждали в RFE - он не ищет сначала все функции, чтобы определить, какие из них нужно добавить, поэтому он быстрее, чем методы оболочки.

sklearn не предоставляет RecursiveFeatureAddition алгоритм, поэтому вам придется реализовать его самостоятельно:

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

Заключение

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

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

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

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

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

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить лучшие модели машинного обучения.