我正在尝试在 XGBoost 上使用 scikit-learn 的 GridSearchCV 进行超参数搜索。在 gridsearch 期间,我希望它早点停止,因为它大大减少了搜索时间并且(期望)在我的预测/回归任务上有更好的结果。我通过其 Scikit-Learn API 使用 XGBoost。
model = xgb.XGBRegressor()
GridSearchCV(model, paramGrid, verbose=verbose ,fit_params={'early_stopping_rounds':42}, cv=TimeSeriesSplit(n_splits=cv).get_n_splits([trainX, trainY]), n_jobs=n_jobs, iid=iid).fit(trainX,trainY)
我尝试使用 fit_params 提供提前停止参数,但随后它抛出了这个错误,这主要是因为缺少提前停止所需的验证集:
/opt/anaconda/anaconda3/lib/python3.5/site-packages/xgboost/callback.py in callback(env=XGBoostCallbackEnv(model=<xgboost.core.Booster o...teration=4000, rank=0, evaluation_result_list=[]))
187 else:
188 assert env.cvfolds is not None
189
190 def callback(env):
191 """internal function"""
--> 192 score = env.evaluation_result_list[-1][1]
score = undefined
env.evaluation_result_list = []
193 if len(state) == 0:
194 init(env)
195 best_score = state['best_score']
196 best_iteration = state['best_iteration']
如何使用 early_stopping_rounds 在 XGBoost 上应用 GridSearch?
注意:模型在没有 gridsearch 的情况下工作,GridSearch 也可以在没有 ‘fit_params={‘early_stopping_rounds’:42} 的情况下工作
原文由 ayyayyekokojambo 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 sklearn 0.21.3 开始更新@glao 的回答和@Vasim 的评论/问题(注意
fit_params
已经从GridSearchCV
的实例化中移出并被移动进入fit()
方法;此外,导入专门从 xgboost 中引入 sklearn 包装器模块):