Как можно избежать использования 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())