Scikit learn BaggingClassifier参数内部参数的网格搜索

Scikit learn BaggingClassifier参数内部参数的网格搜索,scikit-learn,random-forest,grid-search,ensemble-learning,Scikit Learn,Random Forest,Grid Search,Ensemble Learning,这是一个后续,但我相信它值得它自己的线程 在上一个问题中,我们讨论的是“集合分类器的集合,其中每个分类器都有自己的参数。”让我们从他在回答中提供的示例开始: my_est = BaggingClassifier(RandomForestClassifier(n_estimators = 100, bootstrap = True, max_features = 0.5), n_estimators = 5, bootstrap_features = False, bootstrap

这是一个后续,但我相信它值得它自己的线程

在上一个问题中,我们讨论的是“集合分类器的集合,其中每个分类器都有自己的参数。”让我们从他在回答中提供的示例开始:

my_est = BaggingClassifier(RandomForestClassifier(n_estimators = 100, bootstrap = True, 
      max_features = 0.5), n_estimators = 5, bootstrap_features = False, bootstrap = False, 
      max_features = 1.0, max_samples = 0.6 )
现在我想说的是,除了效率、计算成本等考虑因素之外,还有一个普遍的概念:我将如何使用这种设置运行网格搜索

我可以沿着这些线设置两个参数网格:

一个用于装袋分类器:

BC_param_grid = {
'bootstrap': [True, False],
'bootstrap_features': [True, False],    
'n_estimators': [5, 10, 15],
'max_samples' : [0.6, 0.8, 1.0]
}
RFC_param_grid = {
'bootstrap': [True, False],    
'n_estimators': [100, 200, 300],
'max_features' : [0.6, 0.8, 1.0]
}
一个用于
随机森林分类器

BC_param_grid = {
'bootstrap': [True, False],
'bootstrap_features': [True, False],    
'n_estimators': [5, 10, 15],
'max_samples' : [0.6, 0.8, 1.0]
}
RFC_param_grid = {
'bootstrap': [True, False],    
'n_estimators': [100, 200, 300],
'max_features' : [0.6, 0.8, 1.0]
}
现在我可以用我的估计器调用网格搜索:

grid_search = GridSearchCV(estimator = my_est, param_grid = ???)
在这种情况下,如何处理
param_grid
参数?或者更具体地说,如何使用我设置的两个参数网格


我必须说,这感觉就像是在玩。

在上面@James Dellinger的评论之后,我从那里扩展,我能够完成它。事实证明,“秘密酱汁”确实是一个大部分未记录的特性-分隔符(双下划线)(文档中有一些对它的传递引用):似乎是在一个内部/基本估计器参数的名称中添加了内部/基本估计器名称,然后加上这个
,允许您创建一个
参数网格
,其中包括外部和内部估计器的参数

因此,对于问题中的示例,外部估计器是
BaggingClassifier
,内部/基础估计器是
RandomForestClassifier
。因此,您需要做的是,首先,导入需要导入的内容:

from sklearn.ensemble import BaggingClassifier, RandomForestClassifier
from sklearn.model_selection import GridSearchCV
然后是
param_grid
赋值(在本例中为问题示例中的赋值):

最后,您的网格搜索:

grid_search=GridSearchCV(BaggingClassifier(base_estimator=RandomForestClassifier()), param_grid=param_grid, cv=5)

然后你就可以参加比赛了。

我建议尝试一下这里推荐的方法:。显然,将
base\u estimator\uuuu=[…]
,即
base\u estimator\uu max\u depth=[…]
放入
param\u网格
足以告诉GridSearchCV,该特定参数列表用于基本估计器的超参数之一(在您的情况下是一个随机森林分类器)。@James Dellinger-谢谢,这很有效!我听从了你的建议,并从那里开始扩展。为了我们的子孙后代的利益,我将发布最终版本作为答案。。。