在 Python Bagging Classifier 中将最佳网格搜索超参数分配给最终模型

Posted

技术标签:

【中文标题】在 Python Bagging Classifier 中将最佳网格搜索超参数分配给最终模型【英文标题】:Assigning best grid searched hyperparameters into final model in Python Bagging Classifier 【发布时间】:2020-09-19 18:26:50 【问题描述】:

我正在训练逻辑回归并使用 bagging。我想使用 gridsearch CV 来找到最好的超参数。我用 '__' 来表示基础估计器的超参数:

from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import BaggingClassifier

param_grid = 
    'base_estimator__C': [1e-15, 1e-10, 1e-8, 1e-4, 1e-3, 1e-2, 1, 5, 10, 20, 50, 100, 1000], # lambdas for regularization
    'max_samples': [0.05, 0.1, 0.2, 0.5], # for bootstrap sampling
    'max_features': [0.3,0.5,0.7,0.9] 



clf = GridSearchCV(BaggingClassifier(LogisticRegression(penalty='l2'),
                                            n_estimators = 100),
                        param_grid, cv=cv, scoring='f1', return_train_score=True)
clf.fit(x,y)
best_hyperparams = clf.best_params_
best_hyperparams

Results:
'base_estimator__C': 10, 'max_features': 0.3, 'max_samples': 0.1

既然我已经得到了最好的参数,我该如何再次将它放入 bagging 分类器中呢?使用 **best_hyperparams 不起作用,因为 Bagging 分类器无法识别 base_estimator__C 应该进入基本估计器,Logistic 回归

best_clf = BaggingClassifier(LogisticRegression(penalty='l2'), n_estimators = 100, **best_hyperparams) # train model with best hyperparams

【问题讨论】:

【参考方案1】:

初始化bagging分类器后可以使用set_params()

best_clf = BaggingClassifier(LogisticRegression(penalty='l2'), n_estimators = 100)
best_clf.set_params(**best_hyperparams)

【讨论】:

以上是关于在 Python Bagging Classifier 中将最佳网格搜索超参数分配给最终模型的主要内容,如果未能解决你的问题,请参考以下文章

改进bagging,成为Boosting!

2. 集成学习(Ensemble Learning)Bagging

Bagging和Boosting

Bagging 和RF的区别

如何使用 for 循环在决策树上正确实现 bagging?

Bagging 简述