<p>对于当前的xgboost实现(指版本0.6和0.7),这是不可能的。
请注意<strong>本机</strong>xgboost之间的区别</p>
<pre><code> xgboost.train(params, dtrain, num_boost_round=10, evals=(), obj=None,
feval=None, maximize=False, early_stopping_rounds=None, evals_result=None,
verbose_eval=True, xgb_model=None, callbacks=None, learning_rates=None)
</code></pre>
<p>或者</p>
^{pr2}$
<p>以及<strong>sklearn接口</strong>:</p>
<pre><code> class xgboost.XGBRegressor(max_depth=3, learning_rate=0.1,
n_estimators=100, silent=True, objective='reg:linear', booster='gbtree',
n_jobs=1, nthread=None, gamma=0, min_child_weight=1, max_delta_step=0,
subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0,
reg_lambda=1, scale_pos_weight=1, base_score=0.5, random_state=0, seed=None,
missing=None, **kwargs)
</code></pre>
<p>正如您所见,没有什么事情可以像提前停止<code>xgboost.XGBRegressor</code>。请注意,sklearn接口是唯一可以与GridSearchCV结合使用的接口,它需要一个带有.fit(),.predict()等的正确的sklearn估计器。。。在</p>
<p>您可以将<code>early_stopping_rounds</code>,和<code>eval_set</code>作为一个额外的fit_参数传递给GridSearchCV,这实际上是可行的。
但是,<code>GridSearchCV</code>不会改变不同折叠之间的拟合参数,因此您将最终在所有折叠中使用相同的<code>eval_set</code>,这可能不是您所说的CV。在</p>
<pre><code>model=xgb.XGBClassifier()
clf = GridSearchCV(model, parameters,
fit_params={'early_stopping_rounds':20,\
'eval_set':[(X,y)]},cv=kfold)
</code></pre>
<p>经过一番调整,我发现集成<code>early_stopping_rounds</code>和sklearnapi的最安全的方法是实现一个自己的早期停止机制。如果您使用<code>GridSearchCV</code>作为要调整的参数,您可以这样做。然后,您可以观察不同模型的<code>mean_validation_score</code>,并增加<code>n_rounds</code>。然后,您可以为早期停止定义一个定制的启发式;您会注意到默认的启发式不是最优的。在</p>
<p>我认为这也是一个更好的方法,而不是使用一个单一的分裂持有。在</p>