使用网格搜索调整了 3 个参数,但 best_estimator_ 只有 2 个参数

Posted

技术标签:

【中文标题】使用网格搜索调整了 3 个参数,但 best_estimator_ 只有 2 个参数【英文标题】:Tuned 3 parameters using grid search but the best_estimator_ has only 2 parameters 【发布时间】:2021-10-12 09:25:15 【问题描述】:

我正在使用管道和网格搜索调整梯度增强分类器

我的管道是

pipe = make_pipeline(StandardScaler(with_std=True, with_mean=True), \
    RFE(RandomForestClassifier(), n_features_to_select= 15), \
        GradientBoostingClassifier(random_state=42, verbose=True))

参数gri是:

    tuned_parameters = ['gradientboostingclassifier__max_depth': range(3, 5),\
'gradientboostingclassifier__min_samples_split': range(4,6),\
'gradientboostingclassifier__learning_rate':np.linspace(0.1, 1, 10)]

网格搜索完成为

grid = GridSearchCV(pipe, tuned_parameters, cv=5, scoring='accuracy', refit=True)
grid.fit(X_train, y_train)

在训练数据中拟合模型后,当我检查 grid.best_estimator 时,我只能找到我正在拟合的 2 个参数(learning_rate and min_samples_split)。我没有在最佳估计器中找到max_depth 参数。

grid.best_estimator_.named_steps['gradientboostingclassifier'] =

GradientBoostingClassifier(learning_rate=0.9, min_samples_split=5,
                           random_state=42, verbose=True)

但是,如果我使用grid.cv_results 找到最好的'mean_test_score'并找到该测试分数的相应参数,那么我可以在其中找到max_depth

inde = np.where(grid.cv_results_['mean_test_score'] == max(grid.cv_results_['mean_test_score']))

    grid.cv_results_['params'][inde[-1][0]]
'gradientboostingclas...rning_rate': 0.9, 'gradientboostingclas..._max_depth': 3, 'gradientboostingclas...ples_split': 5
special variables
function variables
'gradientboostingclassifier__learning_rate':0.9
'gradientboostingclassifier__max_depth':3
'gradientboostingclassifier__min_samples_split':5

我现在的疑问是,如果我使用经过训练的管道(在我的情况下,对象的名称是“网格”)它是否还会使用“max_depth”参数,还是不会? 那么使用'best parameters'会更好吗,它给了我最好的'mean_test_score'取自grid.cv_results

【问题讨论】:

【参考方案1】:

您的管道已根据您指定的所有三个参数进行了调整。只是max_depth 的最佳值恰好是默认值。打印分类器时,将不包含默认值。比较以下输出:

print(GradientBoostingClassifier(max_depth=3)) # default
# output: GradientBoostingClassifier()

print(GradientBoostingClassifier(max_depth=5)) # not default
# output: GradientBoostingClassifier(max_depth=5)

一般来说,最佳实践是通过拟合的GridSearchCV 对象的best_params_ 属性访问最佳参数,因为这将始终包含所有参数:

grid.best_params_

【讨论】:

以上是关于使用网格搜索调整了 3 个参数,但 best_estimator_ 只有 2 个参数的主要内容,如果未能解决你的问题,请参考以下文章

构建用于调整超参数的网格搜索

我应该在 SMOTE 之前还是之后执行网格搜索(用于调整超参数)?

使用超网格搜索和 10 倍 CV 调整参数后,随机森林模型的 AUC 较低

超参数估计的随机搜索和网格搜索的比较

网格搜索超参数调优,一个参数有2个选择时搜索次数不?

调参-网格搜索(Grid Search)