无法将参数传递给 XGBoost
Unable to pass parameter to XGBoost
我正在尝试对多个参数进行网格搜索,以提供我的数据集。
我注意到没有收到我传递给 xgboost
函数的参数。例如我模型的输出是 alg.get_params()
是
{'colsample_bytree': 1, 'gamma': 0, 'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 100, 'objective': 'multi:softmax', 'reg_alpha': 0, 'reg_lambda': 1}
我已经为参数定义了一个简单的字典,如下所示:
xgb_params = {
'maxdepth':[8],
'objective':['multi:softmax'],
'n_estimators':[600, 900, 1200],
'gamma':[0, .1, .2],
'lambda':[.5, 1, 3],
'alpha':[.5, 1, 2],
'num_class':[3],
#Other parameters
}
参数的实际传递是通过 gridsearch
函数处理的,如下所示:
alg = XGBClassifier()
grid_search = GridSearchCV(estimator = alg, param_grid=xgb_params, scoring='accuracy', cv=4, verbose=1)
grid_search.fit(X_train, y_train)
不确定我哪里出错了。在做了一些研究之后,许多作者建议使用 hyperopt
来优化 search/tune 超参数,但是我试图了解我目前的方法哪里出了问题。
您的代码一切正常,您只是看错了东西。 alg.get_params()
为您提供估算器的默认参数,同时通过 GridSearchCV
训练 4
模型。要访问它们,您需要像这样查询 grid_search
:
获取所有结果:
print(grid_search.cv_results_)
您的最佳估算师:
print(grid_search.best_estimator_)
及其超参数:
print(grid_search.best_params_)
我正在尝试对多个参数进行网格搜索,以提供我的数据集。
我注意到没有收到我传递给 xgboost
函数的参数。例如我模型的输出是 alg.get_params()
是
{'colsample_bytree': 1, 'gamma': 0, 'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 100, 'objective': 'multi:softmax', 'reg_alpha': 0, 'reg_lambda': 1}
我已经为参数定义了一个简单的字典,如下所示:
xgb_params = {
'maxdepth':[8],
'objective':['multi:softmax'],
'n_estimators':[600, 900, 1200],
'gamma':[0, .1, .2],
'lambda':[.5, 1, 3],
'alpha':[.5, 1, 2],
'num_class':[3],
#Other parameters
}
参数的实际传递是通过 gridsearch
函数处理的,如下所示:
alg = XGBClassifier()
grid_search = GridSearchCV(estimator = alg, param_grid=xgb_params, scoring='accuracy', cv=4, verbose=1)
grid_search.fit(X_train, y_train)
不确定我哪里出错了。在做了一些研究之后,许多作者建议使用 hyperopt
来优化 search/tune 超参数,但是我试图了解我目前的方法哪里出了问题。
您的代码一切正常,您只是看错了东西。 alg.get_params()
为您提供估算器的默认参数,同时通过 GridSearchCV
训练 4
模型。要访问它们,您需要像这样查询 grid_search
:
获取所有结果:
print(grid_search.cv_results_)
您的最佳估算师:
print(grid_search.best_estimator_)
及其超参数:
print(grid_search.best_params_)