无法将参数传递给XGBoost

时间:2019-06-13 19:20:15

标签: python machine-learning parameter-passing xgboost grid-search

我正在尝试对给出我的数据集的几个参数进行网格搜索。 我注意到我传递给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来优化超级参数的搜索/调整,但是我试图了解我目前的方法出了什么问题。

1 个答案:

答案 0 :(得分:2)

您的代码一切都很好,您只是在看错误的东西。 alg.get_params()为您提供了估算器的默认参数,而您可以通过GridSearchCV来训练4模型。要访问它们,您需要像这样查询grid_search

获得所有结果:

print(grid_search.cv_results_)

您最好的估算器:

print(grid_search.best_estimator_)

及其超参数:

print(grid_search.best_params_)