Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Какими способами для отбора фичей вы чаще всего пользуетесь в black-box моделях?

Недавно, строя модель градиентного бустинга, задумался, есть ли какие-то продвинутые способы?
Классика в моем понимании - посмотреть feature importance (обычно gain), отобрать по порядку permutation importance, не жертвуя качеством.
ТехнологииData science
Илья
  ·   · 1,2 K
Экс-преподаватель msu.ai, специалист образовательн...  · 29 нояб 2021
Прекрасный вопрос!
Безусловно, как Вы и сказали, можно попробовать в данном случае воспользоваться различными методами для оценки важности признаков, однако в некоторых случаях может затеряться важность комбинации признаков. Рассмотрим задачу XOR. Ниже я в три столбца выпишу данные, которые необходимо смоделировать:
x1 x2 y
0 0 0
0 1 1
1 0 1
1 1 0
Если в данном случае независимо оценивать важность каждого из признаков, то можно получить некорректный вывод о том, что ни один из признаков не имеет смысла: если избавиться от x1, то по x2 будет следующее соответствие значения набору ответов: [0] -> (0, 1), [1] -> (0, 1). Аналогичная ситуация наблюдается, если мы будем смотреть на признак x1 в отрыве от x2: [0] -> (0, 1), [1] -> (0, 1).
Кажется, что каким бы ни было значение каждого из признаков - x1 либо x2, - ответ случаен (0 либо 1 с вероятностью по 0.5). Но мы знаем, что это не так. Следовательно, стоит неким образом учитывать комбинации признаков.
На помощь приходит жадный метод Add-Del. Алгоритм представляет собой чередование двух этапов - жадного добавления признаков и жадного удаления признаков.
Добавление:
Пусть есть некий (возможно, пустой) набор уже используемых моделью признаков F = {F1, F2, ... FN}. Операция проводится следующим образом: для начала, мы последовательно обучаем модель на данных со всеми возможными комбинациями F ⋃ {Fi}, где Fi - некий признак, не используемый в модели на данный момент.
Затем мы вычисляем изменение ошибки для каждого возможного Fi.
Обновляем: F = F ⋃ {Fmax}, где Fmax - Fi с максимальным отрицательным изменением ошибки (то есть, обновляем F только если он от этого станет лучше).
В какой-то момент, при добавлении любого признака мы будем получать точность хуже (возможно, неиспользованными остаются шумные признаки). Но что если мы получим точность лучше, удалив некоторые признаки из F?
Удаление:
Для начала, мы последовательно обучаем модель на всех возможных комбинациях признаков F \ {Fj}, где Fj - некий признак, используемый в модели на данный момент.
Затем мы вычисляем изменение ошибки для каждого возможного Fj.
Обновляем: F = F \ {Fmax}, где Fmax - Fj с максимальным отрицательным изменением ошибки (то есть, обновляем F только если он от этого станет лучше).
В какой-то момент как удаление, так и добавление признаков будут приводить к ухудшению качества работы модели, так что Add-Del завершит свою работу. Ниже предложен график, подготовленный командой msu.ai
Однако и у этого метода есть большое количество проблем. К примеру, в общем случае для получения более-менее точной оценки влияния того или иного признака в Add-Del, необходимо запустить обучение несколько раз (когда предстоит работа с методами глубокого обучения, это точно так), что может быть крайне вычислительно неэффективно. Тут на помощь приходит следующая идея: выбор используемых признаков - это тоже по сути выбор гиперпараметров.
Различные байесковские методы прекрасно себя показали в задачах выбора гиперпараметров моделей, потому они и тут могут быть применены при должной сноровке. Ознакомиться с обзором полезных книг для начала погружения в байесовскую статистику можно здесь.