CV удаления рекурсивных функций в Sklearn изменяется при удалении функций
Я использую модуль RFECV в sklearn, чтобы найти оптимальное количество функций для получения максимальной перекрестной проверки в 2 раза. Я использую регрессор гребня в качестве моей оценки.
rfecv = RFECV(estimator=ridge,step=1, cv=KFold(n_splits=2))
rfecv.fit(df, y)
У меня есть 5 функций в моем наборе данных, которые я стандартизировал с помощью стандартизатора.
Я буду использовать RFECV для своих данных, и он скажет, что 2 функции оптимальны. Но когда я удаляю одну из функций с самым низким коэффициентом регрессии и повторно запускаю RFECV, он теперь говорит, что 3 функции оптимальны.
Когда я продвигаюсь по всем функциям по одному (как должно делать рекурсивное средство), я обнаруживаю, что 3 на самом деле является оптимальным.
Я проверил это с другими наборами данных и обнаружил, что оптимальное количество функций меняется, когда я удаляю объекты по одному и повторно запускаю RFECV.
Я мог бы что-то упустить, но разве это не то, что RFECV должен решить? Любая дополнительная информация о RFECV приветствуется.
1 ответ
Это имеет смысл на самом деле. RFECV рекомендует определенное количество функций на основе доступных данных. Когда вы удаляете функцию, вы меняете диапазон оценки.
из документов:
# Determine the number of subsets of features by fitting across
# the train folds and choosing the "features_to_select" parameter
# that gives the least averaged error across all folds.
...
n_features_to_select = max(
n_features - (np.argmax(scores) * step),
n_features_to_select)
n_features_to_select
используется для определения того, сколько функций следует использовать в RFE для любой конкретной итерации (в / из RFECV).
rfe = RFE(estimator=self.estimator,
n_features_to_select=n_features_to_select,
step=self.step, verbose=self.verbose)
И поэтому это напрямую связано с количеством функций, которые вы включаете в свой начальный шаг rfecv.fit().
Кроме того, удаление объекта с самым низким коэффициентом регрессии - не лучший способ обрезки объектов. Коэффициент отражает его влияние на зависимую переменную, а не обязательно на точность модели.