XGBRegressor vs xgboost.train gran diferencia de velocidad?

13

Si entreno a mi modelo con el siguiente código:

import xgboost as xg
params = {'max_depth':3,
'min_child_weight':10,
'learning_rate':0.3,
'subsample':0.5,
'colsample_bytree':0.6,
'obj':'reg:linear',
'n_estimators':1000,
'eta':0.3}

features = df[feature_columns]
target = df[target_columns]
dmatrix = xg.DMatrix(features.values,
                     target.values,
                     feature_names=features.columns.values)
clf = xg.train(params, dmatrix)

termina en aproximadamente 1 minuto.

Si entreno mi modelo usando el método de aprendizaje Sci-Kit:

import xgboost as xg
max_depth = 3
min_child_weight = 10
subsample = 0.5
colsample_bytree = 0.6
objective = 'reg:linear'
num_estimators = 1000
learning_rate = 0.3

features = df[feature_columns]
target = df[target_columns]
clf = xg.XGBRegressor(max_depth=max_depth,
                min_child_weight=min_child_weight,
                subsample=subsample,
                colsample_bytree=colsample_bytree,
                objective=objective,
                n_estimators=num_estimators,
                learning_rate=learning_rate)
clf.fit(features, target)

Tarda más de 30 minutos.

Creo que el código subyacente es casi exactamente el mismo (es decir, XGBRegressorllamadas xg.train): ¿qué está pasando aquí?

usuario1566200
fuente

Respuestas:

19

xgboost.trainignorará el parámetro n_estimators, mientras que xgboost.XGBRegressoracepta. En xgboost.train, las iteraciones de refuerzo (es decir n_estimators) se controlan mediante num_boost_round(predeterminado: 10)

En su caso, el primer código hará 10 iteraciones (por defecto), pero el segundo hará 1000 iteraciones. No habrá ninguna diferencia grande si se intenta cambiar clf = xg.train(params, dmatrix)a clf = xg.train(params, dmatrix, 1000),

Referencias

http://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.train

http://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBRegressor

Icyblade
fuente