如何在 Bagged DecisionTreeClassifiers 上正确使用 GridSearchCV

问题描述 投票:0回答:2

我目前正在尝试通过 GridSearch 对一个集成模型进行超参数调整,该集成模型由装有 BaggingClassifier 的 DecisionTreeclassifiers 组成。我希望能够通过以下参数正确地进行 Gridsearch:

分类器:

'classifier__class_weight': ['balanced'],
'classifier__criterion': ['gini', 'entropy'],
'classifier__max_depth':[1,2,3,4,5,6],
'classifier__max_features':[1,'auto'],
'classifier__min_weight_fraction_leaf': [0.001, 0.005, 0.01],
'classifier__random_state': [0],
'classifier__splitter': ['best','random']

装袋工:

'bagging__bootstrap': [True,False],
'bagging__bootstrap_features': False,
'bagging__max_features': [1.0,2.0,3.0],
'bagging__max_samples': [avgUniqueness,1.0],
'bagging__n_estimators': [10,50,100,1000]

如果可能的话,我想同时调整它们。

我无法立即实施管道,因为 DecisionTreeClassifier 缺少 fit_transform 参数。但我有直觉,那不是正确的方法。

也许我没有看到一些基本的想法。类似问题回复:

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)

但是使用这个解决方案,你可以只对分类器进行超调,而不是一次对整个整体进行超调。同样重要的是要提到我需要将一个固定的 sample_weight 参数传递给分类器,并且“avgUniqueness”是一个

int
值,它控制每棵树的样本数量。

python scikit-learn cross-validation hyperparameters ensemble-learning
2个回答
0
投票

我找到了解决方案。创建 BaggingClassifier 时:

classifier = BaggingClassifier(base_estimator=None, n_estimators=10, *, max_samples=1.0, max_features=1.0, bootstrap=True, bootstrap_features=False, oob_score=False)

可以通过"base_estimator__parameter"给base_estimator传递参数

清楚地解释在:

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


0
投票

你需要

estimator__
不是
base_estimator__

param_grid = {
'estimator__max_depth' : [1, 2, 3, 4, 5],
'max_samples' : [0.05, 0.1, 0.2, 0.5]
}
© www.soinside.com 2019 - 2024. All rights reserved.