调整BaggingClassifier使用的分类器的参数

Tim*_*Tim 9 python scikit-learn

假设我想训练BaggingClassifier那种用途DecisionTreeClassifier:

dt = DecisionTreeClassifier(max_depth = 1)
bc = BaggingClassifier(dt, n_estimators = 500, max_samples = 0.5, max_features = 0.5)
bc = bc.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)

我想用GridSearchCV找到两者的最佳参数BaggingClassifierDecisionTreeClassifier(如max_depthDecisionTreeClassifiermax_samplesBaggingClassifier),究竟是什么语法?

Tim*_*Tim 11

我自己找到了解决方案:

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)
Run Code Online (Sandbox Code Playgroud)

即说,max_depth"属于" __base_estimator,也就是我DecisionTreeClassifier在这种情况下.这可以工作并返回正确的结果.

  • 这似乎没有在任何地方记录,但我发现sklearn中的一个测试以相同的方式执行:https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/ensemble/tests/ test_bagging.py (2认同)

Att*_*k68 5

如果您使用的是管道,则可以使用以下内容扩展接受的答案(请注意双,双下划线):

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)
Run Code Online (Sandbox Code Playgroud)