使用 scikit-learn 进行递归特征消除和网格搜索:DeprecationWarning
Posted
技术标签:
【中文标题】使用 scikit-learn 进行递归特征消除和网格搜索:DeprecationWarning【英文标题】:Recursive Feature Elimination & Grid Search using scikit-learn: DeprecationWarning 【发布时间】:2016-06-30 02:28:23 【问题描述】:我正在构建多个分类器的网格搜索,并希望使用递归特征消除和交叉验证。我从Recursive feature elimination and grid search using 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,因为它似乎在 0.18 中删除了“estimator_params”参数;我正在尝试找出在第 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”和“penalty”中的所有 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 的适当语法更新代码。任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:回答之前在 SO 上发布的问题:https://***.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())
【讨论】:
以上是关于使用 scikit-learn 进行递归特征消除和网格搜索:DeprecationWarning的主要内容,如果未能解决你的问题,请参考以下文章
使用 scikit-learn 对 SVR 进行递归特征消除和网格搜索