【问题标题】:XGboost - Grid search does not work correctlyXGboost - 网格搜索无法正常工作
【发布时间】:2020-02-24 14:14:52
【问题描述】:

我没有参数化的 Xgboost 回归器有 64.5 R2

当我手动添加如下超参数时,我得到66.4 R2

xgb1 = XGBRegressor(
learning_rate=0.09,
max_depth=4,
min_child_weight=2,
subsample=0.7
)

但是,当我进行网格搜索时,在我手动选择的范围内输入超参数 - R2 仅为 63

网格搜索:

xgb1 = XGBRegressor()

parameters = {'learning_rate': [0.09, 0.1, 0.2], 
              'min_child_weight':[1, 2, 3], 
              'gamma':[0, .1],
              'subsample':[.7, .8, .9, 1],
              'colsample_bytree':[.8, .9, 1], 
              'max_depth': [3, 4, 5], 
              'n_estimators': [100, 120, 200] }

xgb_grid = GridSearchCV(xgb1,
                        parameters,
                        cv = 5,
                        n_jobs = -1,
                        verbose=True)

xgb_grid.fit(X_train, y_train)

print(xgb_grid.best_score_)
print(xgb_grid.best_params_)

正如您在“参数”中看到的那样,是我手动选择的值。网格搜索选择完全不同的参数 比默认参数差。 这不是我第一次遇到手动参数化比网格搜索提供更好结果的情况。这可能是什么原因?

最佳参数和得分:

0.6384582336141522
{'colsample_bytree': 0.8, 'gamma': 0.1, 'learning_rate': 0.2, 'max_depth': 4, 'min_child_weight': 3, 'n_estimators': 120, 'subsample': 0.9}

【问题讨论】:

  • 请说明确切您的问题是什么 - 性能不好,或者网格搜索不使用您提供的参数?您的标题暗示第一个,而您的文本暗示第二个。如果是第二种,还请提供流程最终选择的参数。

标签: python machine-learning xgboost grid-search


【解决方案1】:

我没有看到任何问题。

您在第二个代码 sn-p 中列出的所有参数都存在于 parameters 字典中。

此外,由于二次抽样、列抽样等原因,每次运行都存在一定程度的随机性,如果您希望每次使用相同的集合都得到相同的结果参数,然后使用设置为整数值的随机状态初始化回归器:XGBRegressor(random_state=42)

【讨论】:

  • 随机状态设置,结果始终相同。 - 66.4 用于网格搜索,它总是出现 63.3。默认参数 - 64.5
  • 对于网格搜索,数据总共分为 5 组,其中 1 组被排除在训练过程之外进行验证(如果 cv=5)。您是否尝试过,仅将 80% 的数据用于手动方法并在剩余的 20% 上进行验证?
猜你喜欢
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 2019-08-04
  • 2021-11-10
  • 2017-01-28
  • 2013-12-23
  • 2015-07-27
  • 2014-07-17
相关资源
最近更新 更多