Tuning parameters of the classifier used by BaggingClassifier

I found the solution myself:

param_grid = {
    'base_estimator__max_depth' : [1, 2, 3, 4, 5],
    'max_samples' : [0.05, 0.1, 0.2, 0.5]
}

clf = GridSearchCV(BaggingClassifier(DecisionTreeClassifier(),
                                     n_estimators = 100, max_features = 0.5),
                   param_grid, scoring = choosen_scoring)
clf.fit(X_train, y_train)

i.e. saying that max_depth "belongs to" __ the base_estimator, i.e. my DecisionTreeClassifier in this case. This works and returns the correct results.


If you are using a pipeline then you can extend the accepted answer with something like this (note the double, double underscores):

model = {'model': BaggingClassifier,
         'kwargs': {'base_estimator': DecisionTreeClassifier()}
         'parameters': {
             'name__base_estimator__max_leaf_nodes': [10,20,30]
         }}
pipeline = Pipeline([('name', model['model'](**model['kwargs'])])
cv_model = GridSearchCV(pipeline, param_grid=model['parameters'], cv=cv, scoring=scorer)