Найти в Дзене
Властелин машин

Последовательный отбор признаков для модели машинного обучения

Как известно, некоторые признаки, характеризующие объекты в моделях машинного обучения могут оказаться фиктивными или избыточными. Соответственно, их включение в пайплайн может привести к снижению качества прогнозов. Рассмотрим, один из популярных способов оптимизации набора признаков, который заключается в формировании их множества путем последовательного добавления по одному наиболее эффективному.
То есть сначала работа модели тестируется на каждом отдельном признаке и выбирается максимизирующий выбранную оценку, затем добавляется еще один, такой что на паре модель дает лучшую оценку и так далее до достижения заданного количества признаков. Существует схожий алгоритм, но действующий в обратном порядке - когда из множества всех признаков убирается по одному, от потери которого качество меньше всего "пострадает".
Оба алгоритма реализованы в классе
SequentialFeatureSelector модуля sklearn.feature_selection. Рассмотрим его работу на примере следующего датафрейма:

Разделим данные на выборки:

-2

А теперь сформируем пайплайн нашей модели (подробнее читай здесь):

-3

Попытка запустить SequentialFeatureSelector с нашим пайплайном приведет к ошибке. Обнаружилось, что класс SequentialFeatureSelector не корректно работает с ColumnTransformer, поэтому первый шаг заменим на собственную обработку и пересоздадим объект model:

-4

Теперь обучим SequentialFeatureSelector:

-5

В конструктор класса передаем объект модели, количество оптимальных признаков (n_features_to_select) и итераций в кросс-валидации (cv), метрику (scoring), направление (direction, определяет будет происходить добавление или удаление признаков), количество потоков обработки.

Метод get_support возвращает маску выбранных признаков, где True соответствует попавшим в итоговое множество::

-6

Теперь можно запустить пайплайн на отобранных признаках:

-7

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

-8

...

-9

Теперь оставим оптимальное количество признаков и оценим модель:

-10

-11

Наука
7 млн интересуются