使用gridsearch调整超参数会导致过度拟合

时间:2019-08-17 15:26:34

标签: python xgboost grid-search hyperparameters

使用gridsearch调整超参数会导致过度拟合。

火车误差肯定很低,但测试误差却很高。您不能调整超参数来降低测试误差吗?

def custom_wmae(actual_values, predicted_values):
    weight = actual_values.values / sum(actual_values)
    diff = abs(predicted_values - actual_values.values)
    return np.sum(weight * diff)


param_test1 = { 'max_depth':range(3,10,2),
 'min_child_weight':range(1,6,2)}


xgb1_test1 = xgboost.XGBRegressor(
 learning_rate =0.1,
 n_estimators=140,
 max_depth=5,
 objective ='reg:squarederror',
 min_child_weight = 1,
 subsample=0.8,
 scale_pos_weight=1,
 gamma = 0,
 seed=27)

grid_search = GridSearchCV(estimator=xgb1_test1,param_grid= param_test1, cv=5,
                           scoring=make_scorer(custom_wmae, greater_is_better=False),
                           iid=False,
                           return_train_score=True)


params_result= grid_search.fit(shuffled_train_X, shuffled_train_y)

  • 调整之前 train_error:0.386055,test_error:0.674069

-调整后 train_error:0.070645,test_error:0.708254

1 个答案:

答案 0 :(得分:1)

这完全取决于您正在训练的数据。如果用于训练的数据少得多,比如说500行和几列,那么即使如此,您仍试图将其分为训练和测试数据。 XGBoost最有可能过度拟合训练数据。

要确保模型不会过拟合,您可以尝试三件事-

  1. 确保您有足够的数据来进行XGBoost培训。如果不是这样,过度拟合的趋势将始终存在。

  2. 播放您的参数。尝试使用L1和L2正则化为数据引入正则化。

  3. 在官方XGBoost API中,您可以在“ xgb.train()”函数中传递验证集。因此,您可以在函数的eval_set参数中通过测试集。