python - 使用 GridSearchCV 提前停止 - 使用保留的 CV 集进行验证

标签 python scikit-learn xgboost grid-search

我想雇用early-stopping -scikit-learns 中的选项 GridSearchCV -方法。此 SO- thread 中显示了一个示例:

import xgboost as xgb
from sklearn.model_selection import GridSearchCV

trainX= [[1], [2], [3], [4], [5]]
trainY = [1, 2, 3, 4, 5]

testX = trainX 
testY = trainY

param_grid = {"subsample" : [0.5, 0.8],
              "n_estimators" : [600]}

fit_params = {"early_stopping_rounds":1,
             "eval_set" : [[testX, testY]]}


model = xgb.XGBRegressor()
gridsearch = GridSearchCV(estimator  = xgb.XGBRegressor(), 
                          param_grid=param_grid,
                          fit_params=fit_params,                          
                          verbose=1,                          
                          cv=2)
gridsearch.fit(trainX,trainY)

但是,我想将交叉验证过程的保留集用作验证集。有没有办法在 GridSearchCV 中指定它?

最佳答案

这对于 xgboost 的当前实现是不可能的(引用版本 0.6 和 0.7)。
请注意之间的区别本地 xgboost

    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)

或者
xgboost.cv(params, dtrain, num_boost_round=10, nfold=3, stratified=False, 
folds=None, metrics=(), obj=None, feval=None, maximize=False, 
early_stopping_rounds=None, fpreproc=None, as_pandas=True, verbose_eval=None, 
show_stdv=True, seed=0, callbacks=None, shuffle=True)

sklearn 接口(interface) :
    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)

如您所见,xgboost.XGBRegressor 没有提前停止这样的事情。 .请注意,sklearn 接口(interface)是唯一可以与 GridSearchCV 结合使用的接口(interface),它需要一个适当的 sklearn 估计器和 .fit()、.predict() 等......

你可以通过你early_stopping_rounds , 和 eval_set作为 GridSearchCV 的额外 fit_params,这实际上会起作用。
然而,GridSearchCV不会改变不同折叠之间的 fit_params,所以你最终会使用相同的 eval_set在所有的折叠中,这可能不是你所说的简历。
model=xgb.XGBClassifier()
clf = GridSearchCV(model, parameters,
                         fit_params={'early_stopping_rounds':20,\
                         'eval_set':[(X,y)]},cv=kfold)  

经过一些调整,我找到了最安全的集成方式 early_stopping_rounds并且 sklearn API 是为您自己实现 early_stopping 机制。如果你做 GridSearchCV 就可以做到与 n_rounds作为要调整的参数。然后您可以观看 mean_validation_score对于不同型号的增加 n_rounds .然后,您可以为提前停止定义自定义启发式;你会注意到默认的不是最佳的。

我认为这也是一种更好的方法,然后为此目的使用单个拆分保留。

关于python - 使用 GridSearchCV 提前停止 - 使用保留的 CV 集进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49756461/

相关文章:

python - 读取文件中途停止

python - 肘法不同实现方式的比较

python - 如何为流水线多输出分类器绘制树?

python - XGBoost - 我应该如何设置 nthread 参数?

python - 使用 Pandas 附加 BigQuery 表时如何修复无效架构

python - 如何使用pyspark仅对spark数据框中的一列进行排序?

python - 随机森林袋内和节点尺寸

python - Xgboost n_estimators 与显示的树数不匹配

python - 如何在Python中计算XGBoost分类器的联合特征贡献?

Python:如何计算py文件中的关键字?