0

我正在构建多个分类器的网格搜索,并希望使用递归特征消除与交叉验证。我从Recursive feature elimination and grid search using scikit-learn提供的代码开始。下面是我的工作代码:使用scikit-learn递归特征消除和网格搜索:DeprecationWarning

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()检查可用参数列表。检查键显示“C”,“fit_intercept”和“惩罚”全部3个参数键。尝试...

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的适当语法更新代码。任何援助将不胜感激!

回答

0

对以前发布在SO上的问题的回答:https://stackoverflow.com/a/35560648/5336341。感谢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())