与 RFECV 结合时如何在 Gridsearch 中使用“max_features”?
Posted
技术标签:
【中文标题】与 RFECV 结合时如何在 Gridsearch 中使用“max_features”?【英文标题】:How to use 'max_features' in Gridsearch when combining with RFECV? 【发布时间】:2020-04-05 08:51:51 【问题描述】:感谢您提前回答。这是我的第一篇文章,我对 python 比较陌生,所以如果我格式化了一些可怕的东西,我深表歉意。
我试图在 sklearn 中结合递归特征消除和网格搜索来确定超参数和特征数量的最佳组合。使用下面的代码时,我得到 max_features must be in (0, n_features] Estimator fit failed. 对于 max_features 以外的任何内容都是 1。我的数据集中有 300 多个特征,其中许多可能不重要.
'''
param_dist = 'estimator__n_estimators': [i for i in range(11, 121, 10)],
'estimator__criterion': ['gini', 'entropy']
'estimator__max_features': [i for i in range(1, 10)]
estimator = sklearn.ensemble.RandomForestClassifier(n_jobs=-1, random_state=42, bootstrap=True, verbose=True, max_features='auto')
selector = sklearn.feature_selection.RFECV(estimator=estimator, step=1, cv=5,
scoring='accuracy')
rf_nested = sklearn.model_selection.GridSearchCV(estimator=selector, param_grid=param_dist, cv=5,
scoring='accuracy', n_jobs=-1, refit=True, return_train_score=True)
rf_nested.fit(X_train, y_train)
'''
【问题讨论】:
【参考方案1】:我不会将特征选择步骤和超参数优化步骤混为一谈。
问题是您将选择器而不是估算器传递给网格搜索 - 这可能最终会起作用,但这可能不是最好的主意,因为两者是不同的类并且具有不同的方法。
我不确定这两者的实现,但如果只有少数重要(甚至可能只有一个)重要的功能,RFECV 可能会返回少量功能,而 GridSearchCV 可能想要测试更多的功能 - 这些功能看起来是合理的因此不可用。
此外,您正在做的是交叉验证中的交叉验证,这似乎相当不必要。对于网格搜索的每次评估,您运行选择器 5 次,然后运行随机森林 5 次以选择特征数量。
最后,我认为你最好把这两个步骤分开。首先通过 RFECV 找到最重要的特征,然后为 max_features 找到最佳参数。
最终(不相关)建议:我不会对估算器的数量进行网格搜索。随机森林往往不会过拟合,所以最好的选择是在交叉验证时设置一个提前停止参数:)
【讨论】:
以上是关于与 RFECV 结合时如何在 Gridsearch 中使用“max_features”?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS7 中将搜索栏与导航栏结合时 UISearchbar 空间为空?
与科学记数法 kableExtra table R markdown html 结合时,十进制后的数字不一致