使用网格搜索调整了 3 个参数,但 best_estimator_ 只有 2 个参数
Tuned 3 parameters using grid search but the best_estimator_ has only 2 parameters
我正在使用管道和网格搜索调整梯度提升分类器
我的管道是
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
我现在的疑问是,如果我使用经过训练的管道(在我的例子中对象的名称是 'grid'),它是否仍会使用“max_depth
”参数还是不会?
是不是更好地使用'best parameters
',它给了我最好的'mean_test_score
'取自grid.cv_results
您的管道已针对您指定的所有三个参数进行了调整。只是 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_
我正在使用管道和网格搜索调整梯度提升分类器
我的管道是
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
我现在的疑问是,如果我使用经过训练的管道(在我的例子中对象的名称是 'grid'),它是否仍会使用“max_depth
”参数还是不会?
是不是更好地使用'best parameters
',它给了我最好的'mean_test_score
'取自grid.cv_results
您的管道已针对您指定的所有三个参数进行了调整。只是 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_