#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. Ого! Это взорвало мой разум. Спасибо, что указали на это! Чтобы быть уверенным.. оценка — это то, что правильно передается параметру оценки? Если не указано, по умолчанию используется оценка оценщика?