无法将参数传递给 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_)