Умный способ осуществить исчерпывающий выбор функций

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

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

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

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

Чтобы решить эти проблемы, мы выпустили shap-hypetune: пакет Python для одновременной настройки гиперпараметров и выбора функций. Он направлен на оптимизацию в одном конвейере оптимального количества функций при поиске наилучшей конфигурации параметров моделей повышения градиента. Он предоставляет различные методы поиска параметров (сетка, случайный или байесовский поиск) и стратегии выбора признаков (рекурсивное исключение/добавление признаков и Борута), а также используя значения SHAP для улучшения обобщения.

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

Добавление рекурсивных функций

Рекурсивное добавление функций выбирает функции в соответствии с рекурсивной процедурой добавления. Схема рабочего процесса представлена ​​ниже:

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

Выполнить рекурсивное добавление функций с помощью shap-hypetune несложно.

rfa = BoostRFA(
    LGBMClassifier(), 
    step=3, min_features_to_select=1
)
rfa.fit(X_train, y_train, eval_set=[(X_val, y_val)])

В приведенном выше примере мы просто используем RFA с LGBMClassifier. Настроек много. Например, мы можем использовать экземпляр BoostRFA с важностью функции SHAP (вместо классического древовидного экземпляра) или при поиске оптимальных конфигураций параметров.

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

Рекурсивное устранение признаков

Рекурсивное исключение функций выбирает функции в соответствии с процедурой рекурсивного исключения. Схема рабочего процесса представлена ​​ниже:

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

Что касается случая с RFA, рекурсивное добавление функций с помощью shap-hypetune не представляет сложности.

rfe = BoostRFE(
    LGBMClassifier(), 
    step=3, min_features_to_select=1
)
rfe.fit(X_train, y_train, eval_set=[(X_val, y_val)])

В приведенном выше примере мы просто используем RFE с LGBMClassifier. Настроек много. Например, мы можем использовать экземпляр BoostRFE с важностью функции SHAP (вместо классического древовидного экземпляра) или при поиске конфигураций с оптимальными параметрами.

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

Выводы

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

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

Если вам интересна эта тема, я предлагаю:

ПРОВЕРЬТЕ МОЙ РЕПО GITHUB

Оставайтесь на связи: Linkedin