Как можно избежать использования estimator_params при использовании RFECV, вложенного в GridSearchCV?

В настоящее время я работаю над рекурсивным удалением объектов (RFECV) в рамках поиска по сетке (GridSearchCV) для методов на основе дерева, использующих scikit-learn. Чтобы сделать это, я использую текущую версию dev на GitHub (0.17), которая позволяет RFECV использовать важность функций из методов дерева для выбора объектов, которые нужно отбросить.

Для ясности это означает:

  • перебрать гиперпараметры для текущего метода дерева
  • для каждого набора параметров выполнить рекурсивное удаление признаков, чтобы получить оптимальное количество признаков
  • сообщить "счет" (например, точность)
  • определить, какой набор параметров дает лучший результат

В данный момент этот код работает нормально, но я получаю предупреждение об устаревании при использовании estimator_params. Вот текущий код:

# set up list of parameter dictionaries (better way to do this?)
depth = [1, 5, None]
weight = ['balanced', None]
params = []

for d in depth:
    for w in weight:
    params.append(dict(max_depth=d, 
                       class_weight=w))

# specify the classifier
estimator = DecisionTreeClassifier(random_state=0, 
                                   max_depth=None, 
                                   class_weight='balanced')

# specify the feature selection method
selector = RFECV(estimator,
                 step=1, 
                 cv=3, 
                 scoring='accuracy')

# set up the parameter search
clf = GridSearchCV(selector, 
                   {'estimator_params': param_grid}, 
                   cv=3)

clf.fit(X_train, y_train)

clf.best_estimator_.estimator_

Вот предупреждение об амортизации в полном объеме:

home/csw34/git/scikit-learn/sklearn/feature_selection/rfe.py:154: DeprecationWarning:

The parameter 'estimator_params' is deprecated as of version 0.16 and will be removed in 0.18. The parameter is no longer necessary because the value is set via the estimator initialisation or set_params method.

Как я мог бы достичь того же результата, не используя estimator_params в GridSearchCV для передачи параметров через RFECV в оценщик?

1 ответ

Это решает вашу проблему:

params = {'estimator__max_depth': [1, 5, None],
          'estimator__class_weight': ['balanced', None]}
estimator = DecisionTreeClassifier()
selector = RFECV(estimator, step=1, cv=3, scoring='accuracy')
clf = GridSearchCV(selector, params, cv=3)
clf.fit(X_train, y_train)
clf.best_estimator_.estimator_

Чтобы увидеть больше, используйте:

print(selector.get_params())
Другие вопросы по тегам