使用嵌套在 GridSearchCV 中的 RFECV 时,如何避免使用 estimator_params?

Posted

技术标签:

【中文标题】使用嵌套在 GridSearchCV 中的 RFECV 时,如何避免使用 estimator_params?【英文标题】:How can I avoid using estimator_params when using RFECV nested within GridSearchCV? 【发布时间】:2015-10-25 09:20:07 【问题描述】:

我目前正在使用 scikit-learn 为基于树的方法在网格搜索 (GridSearchCV) 中进行递归特征消除 (RFECV)。为此,我使用了 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.

如何在不使用 GridSearchCV 中的 estimator_params 将参数通过 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())

【讨论】:

是否可以将多个估算器添加到 RFECV(类似于管道)中以查看哪个效果最好?换句话说,不是有一个固定的 RandomForest,而是说添加其他估计器?如果是这样,你能更新你的答案吗? 我认为您可以创建自己的估算器并在其中处理其他估算器,但我认为它毫无价值,因为它会增加复杂性并且不会给您任何回报。您可以只遍历估算器列表。

以上是关于使用嵌套在 GridSearchCV 中的 RFECV 时,如何避免使用 estimator_params?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Gridsearch 进行 RFE 排名

插入符号 rfe + 和 ROC 中的特征选择

嵌套交叉验证:cross_validate 如何处理 GridSearchCV 作为其输入估计器?

使用 sklearn 嵌套交叉验证获得最佳参数

R 在 RFE(递归特征消除)中使用我自己的模型来选择重要特征

R语言使用caret包的rfe函数进行特征筛选选择特征消除RFE(Recursive Feature Elimination)进行特征筛选(feature selection)