网格搜索袋分类器参数内的参数


这是

对这里回答的问题的后续,但我相信它应该有自己的线索。

在上一个问题中,我们处理的是"集成分类器的集合,其中每个分类器都有自己的参数"。 让我们从MaximeKan在他的回答中提供的例子开始:

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 )

现在假设我想比这更上一层楼:撇开效率、计算成本等考虑因素,作为一个一般概念:我将如何使用这种设置运行网格搜索?

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

一个用于BaggingClassifier

BC_param_grid = {
'bootstrap': [True, False],
'bootstrap_features': [True, False],    
'n_estimators': [5, 10, 15],
'max_samples' : [0.6, 0.8, 1.0]
}

还有一个用于RandomForestClassifier

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 评论,并从那里扩展,我能够完成它。事实证明,"秘密调味料"确实是一个大部分未记录的功能 - __ (双下划线(分隔符(在管道文档中有一些对它的传递引用(:似乎添加内部/基本估算器名称,后跟此__到内部/基本估计器参数的名称中,允许您创建一个涵盖外部和内部估算器参数的param_grid

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

from sklearn.ensemble import BaggingClassifier, RandomForestClassifier
from sklearn.model_selection import GridSearchCV

后跟param_grid作业(在本例中为问题示例中的作业(:

param_grid = {
 'bootstrap': [True, False],
 'bootstrap_features': [True, False],    
 'n_estimators': [5, 10, 15],
 'max_samples' : [0.6, 0.8, 1.0],
 'base_estimator__bootstrap': [True, False],    
 'base_estimator__n_estimators': [100, 200, 300],
 'base_estimator__max_features' : [0.6, 0.8, 1.0]
}

最后,您的网格搜索:

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

你去参加比赛了。

相关内容

  • 没有找到相关文章

最新更新