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

В настоящее время я работаю над устранением рекурсивных функций (RFECV) в поиске по сетке (GridSearchCV) для методов на основе дерева с использованием scikit-learn. Для этого я использую текущую версию для разработчиков на 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 в оценщик?


person Chris Whittleston    schedule 03.08.2015    source источник


Ответы (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())
person Paulo Alves    schedule 22.02.2016
comment
Можно ли добавить несколько оценщиков в RFECV (аналогично конвейеру), чтобы увидеть, какой из них работает лучше всего? другими словами, вместо того, чтобы иметь один фиксированный RandomForest, скажем, добавить другие оценщики? если да, можете ли вы обновить свой ответ. - person user702846; 16.02.2019
comment
Я думаю, вы могли бы создать свой собственный оценщик и управлять другими внутри него, но я думаю, что это бесполезно, так как это увеличит сложность и ничего не даст вам взамен. Вы можете просто перебрать список оценщиков. - person Paulo Alves; 18.02.2019