我正在尝试对给出我的数据集的几个参数进行网格搜索。
我注意到我传递给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
来优化超级参数的搜索/调整,但是我试图了解我目前的方法出了什么问题。
答案 0 :(得分:2)
您的代码一切都很好,您只是在看错误的东西。 alg.get_params()
为您提供了估算器的默认参数,而您可以通过GridSearchCV
来训练4
模型。要访问它们,您需要像这样查询grid_search
:
获得所有结果:
print(grid_search.cv_results_)
您最好的估算器:
print(grid_search.best_estimator_)
及其超参数:
print(grid_search.best_params_)