Исключение рекурсивных функций и поиск по сетке с использованием scikit-learn: DeprecationWarning

Я строю сетку поиска по нескольким классификаторам и хочу использовать рекурсивное исключение объектов с перекрестной проверкой. Я начал с кода, описанного в разделе Устранение рекурсивных функций и поиск по сетке с использованием scikit-learn. Ниже мой рабочий код:

param_grid = [{'C': 0.001}, {'C': 0.01}, {'C': .1}, {'C': 1.0}, {'C': 10.0},
              {'C': 100.0}, {'fit_intercept': True}, {'fit_intercept': False},
              {'penalty': 'l1'}, {'penalty': 'l2'}]

estimator = LogisticRegression()
selector = RFECV(estimator, step=1, cv=5, scoring="roc_auc")
clf = grid_search.GridSearchCV(selector, {"estimator_params": param_grid},
                               cv=5, n_jobs=-1)
clf.fit(X,y)
print clf.best_estimator_.estimator_
print clf.best_estimator_.ranking_
print clf.best_estimator_.score(X, y)

Я получаю DeprecationWarning, так как кажется, что параметр "estimator_params" удаляется в 0.18; Я пытаюсь выяснить правильный синтаксис для использования в строке 4.

Попытка...

param_grid = [{'C': 0.001}, {'C': 0.01}, {'C': .1}, {'C': 1.0}, {'C': 10.0},
              {'C': 100.0}, {'fit_intercept': True}, {'fit_intercept': False},
              {'fit_intercept': 'l1'}, {'fit_intercept': 'l2'}]
clf = grid_search.GridSearchCV(selector, param_grid,
                               cv=5, n_jobs=-1)

Возвращает ValueError: Значения параметра должны быть списком. А также...

param_grid = {"penalty": ["l1","l2"],
           "C": [.001,.01,.1,1,10,100],
           "fit_intercept": [True, False]}
clf = grid_search.GridSearchCV(selector, param_grid,
                               cv=5, n_jobs=-1)

Возвращает ValueError: Неверный штраф параметра для оценщика RFECV. Проверьте список доступных параметров с помощью estimator.get_params().keys(), Проверка ключей показывает все 3 из "C", "fit_intercept" и "штраф" в качестве ключей параметров. Попытка...

param_grid = {"estimator__C": [.001,.01,.1,1,10,100],
              "estimator__fit_intercept": [True, False],
              "estimator__penalty": ["l1","l2"]}
clf = grid_search.GridSearchCV(selector, param_grid,
                               cv=5, n_jobs=-1)

никогда не завершает выполнение, поэтому я предполагаю, что тип назначения параметров не поддерживается.

На данный момент я настроен на игнорирование предупреждений, но я хотел бы обновить код с соответствующим синтаксисом для 0.18. Любая помощь будет оценена!

1 ответ

Ответ на вопрос, ранее размещенный на SO: /questions/46318440/kak-mozhno-izbezhat-ispolzovaniya-estimatorparams-pri-ispolzovanii-rfecv-vlozhennogo-v-gridsearchcv/46318458#46318458. Спасибо Paulo Alves за ответ.

Соответствующий код:

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())
Другие вопросы по тегам