N08*_*N08 5 python scikit-learn grid-search xgboost
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)
Run Code Online (Sandbox Code Playgroud)
但是,我想使用交叉验证过程的保留集作为验证集。有没有办法在 中指定这一点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)
Run Code Online (Sandbox Code Playgroud)
或者
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)
Run Code Online (Sandbox Code Playgroud)
和sklearn 界面:
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)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,没有提前停止这样的事情xgboost.XGBRegressor。请注意,sklearn 接口是唯一可以与 GridSearchCV 结合使用的接口,它需要一个带有 .fit()、.predict() 等的正确 sklearn 估计器...
您可以将early_stopping_rounds,eval_set作为额外的 fit_params 传递给 GridSearchCV,这实际上是可行的。但是,GridSearchCV不会更改不同折叠之间的 fit_params,因此您最终会eval_set在所有折叠中使用相同的参数,这可能不是您所说的 CV 的意思。
model=xgb.XGBClassifier()
clf = GridSearchCV(model, parameters,
fit_params={'early_stopping_rounds':20,\
'eval_set':[(X,y)]},cv=kfold)
Run Code Online (Sandbox Code Playgroud)
经过一些调整,我发现最安全的集成方式early_stopping_rounds和 sklearn API 是自己实现一个 Early_stopping 机制。GridSearchCV如果您使用要调整的参数进行调整,则可以做到这一点n_rounds。然后您可以观看mean_validation_score不同型号的增加n_rounds。然后您可以定义一个自定义启发式以提前停止;您会注意到默认值并不是最佳的。
我认为这也是比使用单个拆分保留来实现此目的更好的方法。
| 归档时间: |
|
| 查看次数: |
8446 次 |
| 最近记录: |