Python 使用gridsearch调整hyperparameter会导致过度拟合

Python 使用gridsearch调整hyperparameter会导致过度拟合,python,xgboost,grid-search,hyperparameters,Python,Xgboost,Grid Search,Hyperparameters,使用gridsearch调整hyperparameter会导致过度拟合 列车误差肯定很低,但测试误差很大。您不能调整hyperparameter以降低测试错误吗 def自定义\u wmae(实际值、预测值): 权重=实际值。值/总和(实际值) 差值=绝对值(预测值-实际值。值) 返回np.和(重量*差异) 参数test1={'max_depth':范围(3,10,2), “最小儿童体重”:范围(1,6,2)} xgb1_test1=xgboost.XGBRegressor( 学习率=0.1, n

使用gridsearch调整hyperparameter会导致过度拟合

列车误差肯定很低,但测试误差很大。您不能调整hyperparameter以降低测试错误吗

def自定义\u wmae(实际值、预测值):
权重=实际值。值/总和(实际值)
差值=绝对值(预测值-实际值。值)
返回np.和(重量*差异)
参数test1={'max_depth':范围(3,10,2),
“最小儿童体重”:范围(1,6,2)}
xgb1_test1=xgboost.XGBRegressor(
学习率=0.1,
n_估计值=140,
最大深度=5,
objective='reg:squaredrror',
最小儿童重量=1,
子样本=0.8,
天平位置重量=1,
伽马=0,
种子数=27)
网格搜索=网格搜索cv(估计器=xgb1_测试1,参数网格=参数测试1,cv=5,
评分=制作评分器(自定义评分器,越大越好=错误),
iid=假,
返回列车(分数=真)
参数结果=网格搜索.fit(随机序列X,随机序列y)
  • 调谐前 列错误:0.386055,测试错误:0.674069
-调谐后
训练错误:0.070645,测试错误:0.708254这一切都取决于你正在训练的数据。如果您用于培训的数据非常少,比如说500行和几列,即使这样,您也要尝试将数据分为培训数据和测试数据。XGBoost最有可能过度拟合训练数据

为了确保您的模型不会过度贴合,您可以尝试三种方法-

  • 确保您有足够的数据用于XGBoost培训。如果不是这样,过度拟合的趋势将始终存在

  • 玩你的参数。尝试使用L1和L2正则化将正则化引入数据

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


  • “调整前”和“调整后”是什么意思?原始的
    xgb1_test1
    模型配置未包含在网格搜索中,因此未进行尝试,也无法找到更好的选择。GridsearchCV使用测试错误而不是训练错误来定义更好的参数集,使用{'max_defth':4,'min_child_weight':2}。我还使用gridsearch来查找gamma的超参数,子样本,colsample_bytree,reg_alpha,结果的最终模型是下面的代码。xgb1_2=xgboost.XGBRegressor(学习率=00.1,n_估计量=5000,最大偏差=4,客观='reg:squarederror'min_child_weight=2,子样本=0.9,colsample_bytree=0.75,gamma=0.1,seed=27)结果=wmae_误差(xgb1_2,ewm_df)打印(“训练误差:%f,测试误差:%f”%(结果[0],结果[1]))