对 BaggingClassifier 参数内的参数进行网格搜索
Grid search on parameters inside the parameters of a BaggingClassifier
这是 的跟进,但我相信它值得拥有自己的话题。
在上一个问题中,我们处理的是“集成分类器的集成,其中每个都有自己的参数”。让我们从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
参数?或者更具体地说,如何使用我设置的两个参数网格?
不得不说,感觉就是在玩matryoshka dolls.
根据上面的@James Dellinger 评论,并从那里扩展,我能够完成它。事实证明,“秘方”确实是一个几乎没有记录的功能—— __
(双下划线)分隔符(Pipeline 文档中有一些对它的引用):似乎添加 inside/base 估计器名称,后跟此 __
到 inside/base 估计器参数的名称,允许您创建一个 param_grid
涵盖外部和内部估计器的参数。
因此对于问题中的示例,外部估计量是 BaggingClassifier
,inside/base 估计量是 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)
你开始比赛了。
这是
在上一个问题中,我们处理的是“集成分类器的集成,其中每个都有自己的参数”。让我们从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
参数?或者更具体地说,如何使用我设置的两个参数网格?
不得不说,感觉就是在玩matryoshka dolls.
根据上面的@James Dellinger 评论,并从那里扩展,我能够完成它。事实证明,“秘方”确实是一个几乎没有记录的功能—— __
(双下划线)分隔符(Pipeline 文档中有一些对它的引用):似乎添加 inside/base 估计器名称,后跟此 __
到 inside/base 估计器参数的名称,允许您创建一个 param_grid
涵盖外部和内部估计器的参数。
因此对于问题中的示例,外部估计量是 BaggingClassifier
,inside/base 估计量是 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)
你开始比赛了。