使用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.070645,test_error:0.708254
答案 0 :(得分:1)
这完全取决于您正在训练的数据。如果用于训练的数据少得多,比如说500行和几列,那么即使如此,您仍试图将其分为训练和测试数据。 XGBoost最有可能过度拟合训练数据。
要确保模型不会过拟合,您可以尝试三件事-
确保您有足够的数据来进行XGBoost培训。如果不是这样,过度拟合的趋势将始终存在。
播放您的参数。尝试使用L1和L2正则化为数据引入正则化。
在官方XGBoost API中,您可以在“ xgb.train()”函数中传递验证集。因此,您可以在函数的eval_set参数中通过测试集。