【问题标题】:Xgboost Parameter Tuning Random searchXgboost 参数调优随机搜索
【发布时间】:2021-06-02 09:57:40
【问题描述】:

我在下面使用随机搜索的xgboost参数调整代码

import xgboost as xgb
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
from sklearn.model_selection import RandomizedSearchCV
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import fbeta_score, make_scorer
from xgboost.sklearn import XGBRegressor

parameters = {'objective':['reg:squarederror'],
              'booster':['gbtree','gblinear'],
              'learning_rate': [0.1], 
              'max_depth': [7,10,15,20],
              'min_child_weight': [10,15,20,25],
              'colsample_bytree': [0.8, 0.9, 1],
              'n_estimators': [300,400,500,600],
              "reg_alpha"   : [0.5,0.2,1],
              "reg_lambda"  : [2,3,5],
              "gamma"       : [1,2,3]}

xgb_model = XGBRegressor(random_state=30)

grid_obj_xgb = RandomizedSearchCV(xgb_model,parameters, cv=5,n_iter=15,scoring='neg_mean_absolute_error',verbose=5,n_jobs=12)
grid_obj_xgb.fit(df_train, y_train,verbose = 1)

y_pred_train = grid_obj_xgb.predict(df_train)
y_pred_test = grid_obj_xgb.predict(df_test)

err_xgb_train=mean_absolute_error(y_train, y_pred_train, multioutput='raw_values')

我的 df_train 中有 1,200,000 行,第 75 列,这需要很长时间核心 或者考虑到我拥有的数据量,这需要时间。

我能够运行一次迭代并能够得到结果,所以我的代码没有错,但是对于一次迭代也需要很多时间。

【问题讨论】:

    标签: python machine-learning scikit-learn xgboost gridsearchcv


    【解决方案1】:

    我建议使用 hyperopt 而非 RandomSearch 来检查贝叶斯优化以进行超参数调整。这使我们能够使用概率方法快速确定最优参数集。由于随机搜索会占用您大量时间,因此您可能无法轻松找到最佳解决方案。

    您还可以使用 hyperopt 巧妙地自定义搜索空间(see here)

    我使用 python 中的 hyperopt 库亲自尝试过,效果非常好。查看this tutorial 了解更多信息。你也可以从我的GitHub下载相关的notebook

    【讨论】:

      【解决方案2】:

      您正在从1200000x75的相当大数据集开始,从1200000x75值开始:运行很多时间是正常的。在这里,您有许多不同的选项来加快计算。正如@Shaunak指出的那样,您可能希望使用Hyperopt,这通常会在几个迭代后收敛。此外,根据您尝试解决的特定问题以及您可能想要尝试以下一个或多个的数据:

      • 使用Catboost或LightGBM。它们基于不同的决策树实现,通常比XGBoost更快。 Li>
      • 样本数据集以减少行数
      • 做一些特征选择或维度减少(例如PCA)以减少列的数量
      • 考虑构建较少数量的树(减少估算器的数量)
      • 考虑构建更小的树(减少最大深度)
      • 考虑使用其他(通常更简单)的模型更快地运行(例如线性回归)。鉴于您拥有的数据量,您可能仍会获得良好的性能。
      • 减少在交叉验证中使用的折叠数,也许通过使用早期停止的分隔验证集。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-10
        • 2023-02-09
        • 1970-01-01
        • 2019-06-19
        • 2020-09-10
        • 1970-01-01
        • 2020-12-27
        • 1970-01-01
        相关资源
        最近更新 更多