XGBRegressor vs xgboost.train énorme différence de vitesse?

13

Si je forme mon modèle en utilisant le code suivant:

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)

il se termine en environ 1 minute.

Si je forme mon modèle à l'aide de la méthode d'apprentissage 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)

cela prend plus de 30 minutes.

Je pense que le code sous-jacent est presque exactement le même (c'est XGBRegressor-à- dire les appels xg.train) - que se passe-t-il ici?

user1566200
la source

Réponses:

19

xgboost.trainignorera le paramètre n_estimators, tandis qu'il xgboost.XGBRegressoraccepte. Dans xgboost.train, booster les itérations (ie n_estimators) est contrôlé par num_boost_round( par défaut: 10)

Dans votre cas, le premier code fera 10 itérations (par défaut), mais le second fera 1000 itérations. Il n'y aura pas de grande différence si vous essayez de vous changer clf = xg.train(params, dmatrix)en clf = xg.train(params, dmatrix, 1000),

Les références

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
la source