Исключение рекурсивных функций и поиск по сетке с использованием 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())