Как перекрестная проверка рекурсивного устранения функций удаляет функции на каждой итерации (sklearn RFECV)?

#python #scikit-learn #rfe

#python #scikit-learn #rfe

Вопрос:

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

Итак, как RFECV удаляет функции на каждой итерации? Я понимаю обычную RFE, но как вступает в игру перекрестная проверка?

Вот мои экземпляры:

 clf = GradientBoostingClassifier(loss='deviance', learning_rate=0.03, n_estimators=500,
                                 subsample=1.0, criterion='friedman_mse', min_samples_leaf=100,
                                 max_depth=7, max_features='sqrt', random_state=123)
rfe = RFECV(estimator=clf, step=1, min_features_to_select=35, cv=5, scoring='roc_auc',
            verbose=1, n_jobs=-1)
rfe.fit(X_train, y_train)
 

Я не смог найти ничего более конкретного в документации или руководстве пользователя.

Ответ №1:

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

Вместо RFECV этого выполняется отдельный RFE s для каждого из обучающих сгибов, вплоть до min_features_to_select . Это, скорее всего, приведет к разным порядкам исключения и окончательным функциям, но ничего из этого не принимается во внимание: сохраняются только оценки результирующих моделей для каждого количества функций на тестовом сгибе. (Обратите RFECV внимание, что scorer в нем RFE отсутствует параметр.) Затем эти оценки усредняются, и наилучший результат соответствует выбранному n_features_ . Наконец, последний RFE выполняется для всего набора данных с этим целевым количеством объектов.

исходный код

Комментарии:

1. Как в каждом отдельном процессе RFE все функции в конечном итоге получают оценку важности, если оценки получены из результирующей модели (с подмножеством функций) на тестовом сгибе?

2. @oustella Они не получают оценку глобальной важности. Они получают локальную оценку, которая используется на следующем этапе устранения. Глобальная оценка — это просто «оценка для k функций в этом сгибе», и они агрегируются по сгибам для одного k , даже если эти k функции (вероятно) различаются по сгибам.

3. Спасибо за дальнейшие объяснения! Я понимаю, что эти k функций могут отличаться для каждого этапа обучения. Просто запутался в том, как один RFE смог присвоить важность функции всем функциям, которые он рекурсивно устраняет (это видно в RFECV.cv_results_ для каждого разделения). Усредняет ли это локальную важность на каждом этапе устранения? Глядя на исходный код, я не уверен, что это так.

4. @oustella cv_results_ не содержит никакой информации о важности функций, только оценки модели. Запись i в каждом значении этого dict соответствует min_features_to_select i функциям. (Для этого может потребоваться лучшая документация!)

5. Ого! Это взорвало мой разум. Спасибо, что указали на это! Чтобы быть уверенным.. оценка — это то, что правильно передается параметру оценки? Если не указано, по умолчанию используется оценка оценщика?